ios 中copy和strong使用之我见

copy和strong一般情况是不可变类型用copy,可变类型用strong,但是根据个人需要而异。

首先,属性使用copy的时候,特殊的字符串赋值的时候是指针指向,共用同一块内存。

然而NSArray,NSDictionary,NSSet这些容器类的赋值时,分两种情况,copy的时候相当于值拷贝,而strong相当于指针指向同一块内存。故copy的NSArray不会跟着赋值的NSMutableArray值改变而变化,strong的NSArray由于与NSMutableArray公用同一块内存而跟着改变。

下面图片为证。

ios 中copy和strong使用之我见_第1张图片
容器类的不可变类型使用strong,打印表明值和指针相同
ios 中copy和strong使用之我见_第2张图片
容器类的不可变类型使用copy,打印表明值和指针都不相同

特殊的字符串。

不可变的具有相同的指针地址,某个字符串变化只有他自己指向新的地址

ios 中copy和strong使用之我见_第3张图片
不可变的具有相同的指针地址,某个字符串变化只有他自己指向新的地址


可变字符串使用copy的是新地址,但是值没有变。

ios 中copy和strong使用之我见_第4张图片
可变字符串发生变化其他的不会变化

仅供参数,错误之处请指正,有个疑问为什么用weak修饰的字符串和strong一样。

你可能感兴趣的:(ios 中copy和strong使用之我见)