美文网首页
NSString ---》copy Strong

NSString ---》copy Strong

作者: 过眼云烟1102 | 来源:发表于2018-03-19 15:42 被阅读8次

copy赋值时会开辟一个新的内存区域,而 strong 则不会。使用 copy 可以防止不可变的属性被赋值的是可变的数据时,因为可变数据的改变而改变属性的值。举个例子

@interfaceTest:NSObject

@property(nonatomic,strong)NSString*str1;

@property(nonatomic,copy)NSString*str2;

@end

#import"Test.h"

int main(intargc,constchar* argv[]) {

@autoreleasepool{

NSMutableString*str = [NSMutableStringstringWithString:@"hello"];  

      Test *test = [[Test alloc]init];    

    test.str1 = str;    

    test.str2 = str;       

 [str appendString:@" world"];

NSLog(@"str:%@ str1:%@ str2:%@",str,test.str1,test.str2);   

 }

return0;

}

这段代码的输出结果是: str:hello world str1:hello world str2:hello

copy的作用应该显而易见了.

这里我们需要了解一点,copy修饰的NSString在进行set操作时,底层是这样实现的:

我们还是举上面那个例子,进行str = sourceStr操作时,内部会执行一个操作:

str = [sourceStr copy];

那么这个copy里面做了什么呢?

if ([str isMemberOfClass:[str class]])

没错,就是进行一次判断,判断来源是可变的还是不可变的,如果是不可变,那么好,接下来的操作就跟strong修饰的没有区别,进行浅拷贝;如果是可变的,那么会进行一次深拷贝 

isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员。

isMemberOfClass只能确定一个对象是否是当前类的成员。

相关文章

网友评论

      本文标题:NSString ---》copy Strong

      本文链接:https://www.haomeiwen.com/subject/kedpqftx.html