NSString *str = [[NSString alloc] initWithString:@"aaa"];
str 分配的地址如下:
str 變量地址: 0x7fff5fbff878 , str 內(nèi)容地址: 0x100001030
assign
NSString *str2 = [str assign];
str2 和 str 完全相同(變量地址、內(nèi)容地址),不增加 retainCount
assign一般用于基礎(chǔ)數(shù)據(jù)類型 (NSInteger,CGFloat)和C數(shù)據(jù)類型(int, float, double, char)等等
retain
NSString *str3 = [str retain];
str3 和 str 的變量地址相同,指向相同的內(nèi)容地址,str 的retainCount增加1
此對(duì)象只能用于Object-c對(duì)象類型,而不能用于Core Foundation對(duì)象。
(基本數(shù)據(jù)類型 和 CoreFoundation 對(duì)象都沒(méi)有引用計(jì)數(shù))
當(dāng)把對(duì)象添加到 數(shù)組中時(shí),被添加對(duì)象的引用計(jì)數(shù)+1
copy
NSString *str4 = [str copy];
str4 變量地址: 0x7fff5fbff868 與str 不相同,指向相同的內(nèi)容地址,str4的
retainCount增加1
一般用于NSString
總結(jié):
assign 不增加retainCount 多個(gè)對(duì)象共享一個(gè)內(nèi)存塊?
retain 指針拷貝(變量地址、內(nèi)容地址相同) 對(duì)象的retainCount+1
copy 內(nèi)容拷貝(變量地址不同、內(nèi)容地址相同) 新對(duì)象的retainCount +1