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

你可能感兴趣的:(ios - assign retain copy)