標籤:並且 har enc reference mic nsarray tin 簡單 支援
1:ARC環境下,strong代替retain.weak代替assign,xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支援ARC的。xcode 4.3(ios5和以上版本)之後就有了ARC,並且開始使用
strong與weak2:weak的作用:在ARC環境下,所有指向這個對象的weak指標都將被置為nil。這個T特性很有用,相信很多開發人員都被指標指向已釋放的對象所造成的EXC_BAD_ACCESS困擾過,使用ARC以後,不論是strong還是weak類型的指標,都不會再指向一個已經銷毀的對象,從根本上解決了意外釋放導致的crash。3:assign的作用:簡單賦值,不改變引用計數,對基礎資料類型 (例如NSInteger,CGFloat)和C資料類型(int, float, double, char, 等) 適用單一資料型別 assign: 用於非指標變數。用於
基礎資料類型 (例如NSInteger)和C資料類型(int, float, double, char, 等),另外還有id
如:
@property (nonatomic, assign) int number;
@property (nonatomic, assign) id className;//id必須用assign
反正記住:前面不需要加 “*” 的就用assign吧
4:copy的作用:建立一個索引計數為1 的對象,然後釋放舊對象5:strong的作用:在ARC環境下,只要某一對象被一個strong指標指向,該對象就不會被銷毀。如果對象沒有被任何strong指標指向,那麼就會被銷毀。在預設情況下,所有的執行個體變數和局部變數都是strong類型的。可以說strong類型的指標在行為上跟非ARC下得retain是比較相似的
6:retain的作用:在非ARC時代,你需要自己retain一個想要保持的對象,ARC環境下就不需要了。現在唯一要做的就是用一個指標指向這個對象,只要指標沒有被重設為空白,對象就會一直在堆上。當指標指向新值的時候,原來的對象就會被release一次。這對執行個體變數,sunthesize的變數或者是局部變數都是實用的。
assign: 簡單賦值,不更改索引計數(Reference Counting)對基礎資料類copy: 建立一個索引計數為1的對象,然後釋放舊對象。對NSStringretain:釋放舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數為1 ,對其他NSObject和其子類
weak和strong的區別:
weak和strong不同的是 當一個對象不再有strong類型的指標指向它的時候 它會被釋放 ,即使還有weak型指標指向它。一旦最後一個strong型指標離去 ,這個對象將被釋放,所有剩餘的weak型指標都將被清除。
copy與retain的區別:
copy其實是建立了一個相同的對象,而retain不是;copy是內容拷貝,retain是指標拷貝;copy是內容的拷貝 ,對於像NSString,的確是這樣,如果拷貝的是NSArray這時只是copy了指向array中相對應元素的指標.這便是所謂的"淺複製"。
__block和__weak修飾符的區別
__block不管是ARC還是MRC模式下都可以使用,可以修飾對象,還可以修飾基礎資料型別 (Elementary Data Type)。__weak只能在ARC模式下使用,也只能修飾對象(NSString),不能修飾基礎資料型別 (Elementary Data Type)(int)。__block對象可以在block中被重新賦值,__weak不可以。
iOS 開發 property,strong,weak,retain,assign,copy,nomatic 的區別及使用