介紹及區(qū)別
- copy:用于希望保持一份傳入值得拷貝,俄入世值自身的情況,既把原來的對象完整的賦值到另外一個地方,從新加載一內(nèi)存區(qū),味蕾一個地址的值改變了不影響另一個地址的值。
- assign:簡單的直接賦值,相當于說兩個對象指向同一個內(nèi)存區(qū),當內(nèi)存區(qū)的值發(fā)生了改變,既所有指向這個內(nèi)存區(qū)的對象發(fā)生了改變。
- retain:釋放舊對象,即將舊對象的值賦予輸出對象,再提高杜如丁香的引用計數(shù)+1
上面的意思是
Copy其實是建立了一個相同的對象,而retain不是
例如一個NSSting對象,地址為0x1111,內(nèi)容為@“123”
copy到另一個NSString之后,地址為0x2222,地址內(nèi)容相同,當新的對象發(fā)生改變時,原來的對象沒有發(fā)生改變(retain值沒有發(fā)生改變)
retain到另一個NSString之后,地址相同(建立一個指針,指針拷貝),內(nèi)容相同,之歌對象的retain值+1
assign 地址是0x1111,內(nèi)容也是‘ABC’
@property內(nèi)存管理策略的選擇
非ARC
- Copy:只用于NSString\block
- retain: 除NSString\block以外的OC對象
- assign:基本數(shù)據(jù)類型、枚舉、結(jié)構(gòu)體(非OC對象),當2個對象想回引用時,一端用retain,一端用assign.
ARC
- copy:只用于NSString\block
- strong:除NSString\block以外的OC對象
- weak:當兩個對象相互引用,一端用strong,一端用weak
- assign:基本數(shù)據(jù)類型、枚舉、結(jié)構(gòu)體(非OC對象)
(此片文章參考了其他文章,是作者自己練習的文章)