再谈 retain,copy,mutableCopy(官方SDK,声明NSString都用copy非retain)
生活随笔
收集整理的這篇文章主要介紹了
再谈 retain,copy,mutableCopy(官方SDK,声明NSString都用copy非retain)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
之前一直以為retain就是簡單的計數(shù)器+1,copy就是重新開辟內(nèi)存復(fù)制對象;
其實不是這樣,原來之前的自己獨自徘徊于糊涂之中。
(官方SDK,對NSString屬性的定義都是用copy,而不是retain)
在明了的原因是,怕你賦值的是一個MutableString,而MutableString是可變了,如果只是retain,那么當(dāng)你在外面改變了這個值的時候,你的屬性的值也改變了
代碼:
定義一個屬性:
@property (copy,nonatomic)NSString *myTest;
@synthesize myTest;
? ? NSMutableString *temp = [[NSMutableStringalloc]initWithFormat:@"jjjjjj"];
? ? self.myTest = temp;
? ? NSLog(@"%@? ?",myTest);
? ???[temp appendString:@"adsdsdsd"];
? ???NSLog(@"%@? ?",myTest);
打印:
2013-02-20 11:45:41.129 Nimbus[2474:c07] jjjjjj? ?
2013-02-20 11:45:41.131 Nimbus[2474:c07] jjjjjj? ?
那如果用retian呢??
@property (retain,nonatomic)NSString *myTest;
@synthesize myTest;
? ? NSMutableString *temp = [[NSMutableStringalloc]initWithFormat:@"jjjjjj"];
? ? self.myTest = temp;
? ? NSLog(@"%@? ?",myTest);
? ???[temp appendString:@"adsdsdsd"];
? ???NSLog(@"%@? ?",myTest);
2013-02-20 11:48:46.794 Nimbus[2791:c07] jjjjjj? ?
2013-02-20 11:48:46.795 Nimbus[2791:c07] jjjjjjadsdsdsd? ?
聲明的一個NSString *str變量,然后把一個NSMutableString *mStr變量的賦值給它了,如果要求str跟著mStr變化,那么就用retain;如果str不能跟著mStr一起變化,那就用copy。而對于要把NSString類型的字符串賦值給str,那兩都沒啥區(qū)別。不會影響安全性,內(nèi)存管理也一樣。
mutableCopy:始終是深復(fù)制,引用計數(shù)不改變。始終返回一個可變對象
其實不是這樣,原來之前的自己獨自徘徊于糊涂之中。
(官方SDK,對NSString屬性的定義都是用copy,而不是retain)
在明了的原因是,怕你賦值的是一個MutableString,而MutableString是可變了,如果只是retain,那么當(dāng)你在外面改變了這個值的時候,你的屬性的值也改變了
代碼:
定義一個屬性:
@property (copy,nonatomic)NSString *myTest;
@synthesize myTest;
? ? NSMutableString *temp = [[NSMutableStringalloc]initWithFormat:@"jjjjjj"];
? ? self.myTest = temp;
? ? NSLog(@"%@? ?",myTest);
? ???[temp appendString:@"adsdsdsd"];
? ???NSLog(@"%@? ?",myTest);
打印:
2013-02-20 11:45:41.129 Nimbus[2474:c07] jjjjjj? ?
2013-02-20 11:45:41.131 Nimbus[2474:c07] jjjjjj? ?
那如果用retian呢??
@property (retain,nonatomic)NSString *myTest;
@synthesize myTest;
? ? NSMutableString *temp = [[NSMutableStringalloc]initWithFormat:@"jjjjjj"];
? ? self.myTest = temp;
? ? NSLog(@"%@? ?",myTest);
? ???[temp appendString:@"adsdsdsd"];
? ???NSLog(@"%@? ?",myTest);
2013-02-20 11:48:46.794 Nimbus[2791:c07] jjjjjj? ?
2013-02-20 11:48:46.795 Nimbus[2791:c07] jjjjjjadsdsdsd? ?
聲明的一個NSString *str變量,然后把一個NSMutableString *mStr變量的賦值給它了,如果要求str跟著mStr變化,那么就用retain;如果str不能跟著mStr一起變化,那就用copy。而對于要把NSString類型的字符串賦值給str,那兩都沒啥區(qū)別。不會影響安全性,內(nèi)存管理也一樣。
mutableCopy:始終是深復(fù)制,引用計數(shù)不改變。始終返回一個可變對象
總結(jié)
以上是生活随笔為你收集整理的再谈 retain,copy,mutableCopy(官方SDK,声明NSString都用copy非retain)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恋与制作人羁绊是什么(日本2013年源孝
- 下一篇: ios7中让程序使用统一的status