美文网首页
关于copy和strong

关于copy和strong

作者: William8 | 来源:发表于2017-04-08 12:05 被阅读0次

    .h

    @property (copy, strong,nonatomic) NSMutableArray *array;

    .m

    NSArray *array1 = [NSArray arrayWithObjects:@"234", @"323", nil];

    NSMutableArray *tmpArray = [NSMutableArray arrayWithObjects:@"123", @"232", @"2343", nil];

    self.array = array1;//运行到这儿提示警告

    self.array = tmpArray;

    [self.array addObject:@"234"];// 运行到这个地方崩溃

    对于一个Mutable对象,copy方法返回的对象是immutable对象,所以array其实是immutable的,尽管它是mutable类型,修改immutable对象时就会报错。所以对于mutable的属性,我们应该声明为strong类型。

    .h

    @property (strong,copy, nonatomic) NSString *name;

    .m

    NSMutableString *mulString = [[NSMutableString alloc] initWithString:@"William"];

    self.name = mulString;

    NSLog(@" >>>>>>>>>>>>>before name is %@", self.name);

    [mulString appendString:@" Wang"];

    NSLog(@" >>>>>>>>>>>>>after name is %@", self.name);

    防止NSString被修改。当NSString的赋值来源也是NSString时,strong和copy的作用相同,都是给复制来源的引用计数加1;当NSStrig的赋值来源是NSMutableString时,copy会做深拷贝,即重新生成一个新的对象,修改赋值来源不会影响NSString的值。

    相关文章

      网友评论

          本文标题:关于copy和strong

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