你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> assign,copy,strong,weak,nonatomic的理解

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

編輯:IOS技巧綜合
[摘要]本文是對assign,copy,strong,weak,nonatomic的理解的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。

舉個例子:

NSString*houseOfMM= [[NSStringalloc]initWithString:'MM的三室兩廳'];

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

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

此時會在堆上重新開辟一段內存存放@'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了啦。

----------------------------------------------------------------------------------------------------------------選自:http://wenku.baidu.com/view/ab6ed804bed5b9f3f90f1c7d.html

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

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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved