日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

再谈 retain,copy,mutableCopy(官方SDK,声明NSString都用copy非retain)

發(fā)布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再谈 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ù)不改變。始終返回一個可變對象

總結(jié)

以上是生活随笔為你收集整理的再谈 retain,copy,mutableCopy(官方SDK,声明NSString都用copy非retain)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。