NSString *str = [[NSString alloc] initWithString:@"aaa"];
str 分配的地址如下:
str 變量地址: 0x7fff5fbff878 , str 內容地址: 0x100001030
assign
NSString *str2 = [str assign];
str2 和 str 完全相同(變量地址闸翅、內容地址)收叶,不增加 retainCount
assign一般用于基礎數(shù)據(jù)類型 (NSInteger汇歹,CGFloat)和C數(shù)據(jù)類型(int, float, double, char)等等
retain
NSString *str3 = [str retain];
str3 和 str 的變量地址相同,指向相同的內容地址,str 的retainCount增加1
此對象只能用于Object-c對象類型,而不能用于Core Foundation對象针饥。
(基本數(shù)據(jù)類型 和 CoreFoundation 對象都沒有引用計數(shù))
當把對象添加到 數(shù)組中時耐齐,被添加對象的引用計數(shù)+1
copy
NSString *str4 = [str copy];
str4 變量地址: 0x7fff5fbff868 與str 不相同浪秘,指向相同的內容地址,str4的
retainCount增加1
一般用于NSString
總結:
assign 不增加retainCount 多個對象共享一個內存塊?
retain 指針拷貝(變量地址埠况、內容地址相同) 對象的retainCount+1
copy 內容拷貝(變量地址不同耸携、內容地址相同) 新對象的retainCount +1