ios - assign retain copy

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容