国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

assign,copy,strong,weak,nonatomic的理解

2019-11-14 18:43:41
字體:
來源:轉載
供稿:網友

舉個例子:

    NSString *houSEOfMM = [[NSString alloc] initWithString:'MM的三室兩廳'];  

上面一段代碼會執行以下兩個動作:  
1 在堆上分配一段內存用來存儲@' MM的三室兩廳 ' ,比如:內存地址為 0X1111  內容為 ' MM的三室兩廳' ,  
2 在棧上分配一段內存用來存儲 houseForWife ,比如:地址為 0XAAAA  內容自然為 0X1111    

下面分別看下(assign,retain,copy):  
1.assign的情況: NSString  * myHouse  = [ houseOfMM   assign ];  
此時 myHouse 和 houseOfMM 完全相同,地址都是 0XAAAA  ,內容為 0X1111  ,即 myHouse 只是 houseOfMM 的別名,對任何一個操作就等于對另一個操作。因此 retainCount 不需要增加.(同進同出,關系好,一把鑰匙,給我拿著)  
2.retain的情況: NSString  *  myHouse  = [ houseOfMM   retain ];  
此時 myHouse 的地址不再為 0XAAAA ,可能為 0XAABB ,但是內容依然為 0X1111 .因此 myHouse 和 houseOfMM都可以管理' 裝梵幾的三室兩廳 '所在的內存。因此  retainCount 需要增加1.(有些獨立,各自進出,兩把鑰匙)  
3.copy的情況: NSString  *  myHouse  = [ houseOfMM   copy ];  

此時會在堆上重新開辟一段內存存放@'MM的三室兩廳',比如0X1122,內容為@'MM的三室兩廳',同時會在棧上為myHouse分配空間,比如地址:0XAACC,內容為0X1122,因此retainCount增加1供myHouse來管理0X1122這段內存.(兩套@'裝梵幾的三室兩廳',條件好,分居了,房子一人一套,所以鑰匙一人一把。) 


什么時候用assign,當然是破房子,簡裝的房子拉
基礎類型(簡單類型,原子類型):NSInteger,CGPoint,CGFloat,C數據類型(int,float,double,char等)

什么時候用copy
含有可深拷貝的mutable子類的類,如NSArray,NSSet,NSDictionary,NSData的,NSCharacterSet,NSIndexSet,NSString
(可深度拷貝的房子)
但是NSMutableArray這樣的不可以,Mutable的不能用copy,不然初始化會有問題。切記

什么時候用retain
其他NSObject和其子類對象好嘛 (大多數)

ARC中的strong相當于非ARC中的retain,ARC來了以后多搞一把鑰匙就strong了啦。 

以上內容參考原地址為:點這里

weak:由ARC引入的對象變量的屬性,比assign多了一個功能,對象消失后把指針置為nil,避免了野指針(不是null指針,是指向“垃圾”內存(不可用的內存)的指針)

nonatomic 
指出訪問器不是原子操作,而默認地,訪問器是原子操作。這也就是說,在多線程環境下,解析的訪問器提供一個對屬性的安全訪問,從獲取器得到的返回值或者通過設置器設置的值可以一次完成,即便是別的線程也正在對其進行訪問。如果你不指定nonatomic,在自己管理內存的環境中,解析的訪問器保留并自動釋放返回的值,如果指定了nonatomic,那么訪問器只是簡單地返回這個值。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海安县| 阳信县| 木兰县| 隆子县| 哈巴河县| 无极县| 东兰县| 晋江市| 建昌县| 鄂州市| 文山县| 师宗县| 察隅县| 吐鲁番市| 北宁市| 淮滨县| 海伦市| 阜阳市| 社会| 广南县| 内丘县| 福安市| 花莲县| 梁山县| 克拉玛依市| 黄大仙区| 宁城县| 黄山市| 绥德县| 腾冲县| 蕉岭县| 云龙县| 女性| 德庆县| 康平县| 三江| 沙河市| 洪江市| 双峰县| 成都市| 扶风县|