美文网首页
使用copy与strong声明NSString属性的区别

使用copy与strong声明NSString属性的区别

作者: iccpeng | 来源:发表于2016-08-03 16:17 被阅读161次

    声明一个NSString属性使用copy要优于使用strong。选择使用copy的理由是,NSString属性可能被传入一个NSString实例,也可能是一个NSMutableString实例。当传入了一个NSMutableString实例时,字符串的值可能会被悄悄修改,从而造成不必要的错误。通过下面简单示例,应该能够帮助你更好的理解:

    @interface Person : NSObject

    @property (strong, nonatomic) NSString *name;

    @end

    在另一个类中,对 Person 的name 属性进行赋值

    -(void)changeName {

    NSMutableString *personName = [NSMutableString stringWithString:@"zhangSan"];

    Person *person = [[Person alloc] init];

    person.name = personName;

    [personName setString:@"liSi"];

    NSLog(@"************ %@", person.name);

    }

    运行程序后会发现,Person的name是“liSi”。如果我们更改为使用copy声明name属性,Person的name变为了“zhangSan”。在使用strong声明该属性,字符串的retain计数将增加1,属性与字符串指向同一个内存地址。这意味着任何指向这个内存地址的变量都可改变这个值,该例子中personName变量的值改变后,name属性值也跟随变化。如果改用copy的话,则会为Person类创建一个字符串副本,当修改personName 的值时,不会影响字符串副本的值。

    相关文章

      网友评论

          本文标题:使用copy与strong声明NSString属性的区别

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