NSString *str = [[NSString alloc] initWithString:@"aaa"];
str 分配的地址如下:
str 变量地址: 0x7fff5fbff878 , str 内容地址: 0x100001030
assign
NSString *str2 = [str assign];
str2 和 str 完全相同(变量地址、内容地址),不增加 retainCount
assign一般用于基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等等
retain
NSString *str3 = [str retain];
str3 和 str 的变量地址相同,指向相同的内容地址,str 的retainCount增加1
此对象只能用于Object-c对象类型,而不能用于Core Foundation对象。
(基本数据类型 和 CoreFoundation 对象都没有引用计数)
当把对象添加到 数组中时,被添加对象的引用计数+1
copy
NSString *str4 = [str copy];
str4 变量地址: 0x7fff5fbff868 与str 不相同,指向相同的内容地址,str4的
retainCount增加1
一般用于NSString
总结:
assign 不增加retainCount 多个对象共享一个内存块
retain 指针拷贝(变量地址、内容地址相同) 对象的retainCount+1
copy 内容拷贝(变量地址不同、内容地址相同) 新对象的retainCount +1
网友评论