美文网首页
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