美文网首页
字符串属性中的copy与strong

字符串属性中的copy与strong

作者: 前年的邂逅_Jerry | 来源:发表于2017-08-10 19:55 被阅读12次
  • 定义copy和strong的字符串属性
@interface ViewController ()
@property (nonatomic, copy) NSString * strCopy;
@property (nonatomic, strong) NSString * strStrong;
@end
NSMutableString *originString = [NSMutableString stringWithFormat:@"我是可变的源数据字符串"];
    self.strCopy = originString;
    self.strStrong = originString;
    [originString appendFormat:@"_append"];
    NSLog(@"originString = %@ address = %p self.strCopy = %@ address = %p self.strStrong = %@ address = %p",originString,originString,self.strCopy,self.strCopy,self.strStrong,self.strStrong);
  • 打印结果
originString    = 我是可变的源数据字符串_append      address = 0x170269980 
self.strCopy    = 我是可变的源数据字符串             address = 0x170240a20 
self.strStrong  = 我是可变的源数据字符串_append    address = 0x170269980
  • 用copy修饰属性的类型修改为NSMutableString,再对改属性进行append操作会报错:
@interface ViewController ()
@property (nonatomic, copy) NSMutableString * strCopy;
@property (nonatomic, strong) NSString * strStrong;
@end
    NSMutableString *originString = [NSMutableString stringWithFormat:@"我是可变的源数据字符串"];
    self.strCopy = originString;
    self.strStrong = originString;
    [originString appendFormat:@"_append"];
    [self.strCopy appendFormat:@"212"];
    NSLog(@"originString = %@ address = %p self.strCopy = %@ address = %p self.strStrong = %@ address = %p",originString,originString,self.strCopy,self.strCopy,self.strStrong,self.strStrong);

实际上执行的self.strCopy的set点方法为:

- (void)setStrCopy:(NSMutableString *)strCopy{
    //[strCopy copy]产生了不可变的字符串
    _strCopy = [strCopy copy];
}
1862021-d9694468cbad6cdc.png

参考:http://www.jianshu.com/p/e6a7cdcc705d

相关文章

网友评论

      本文标题:字符串属性中的copy与strong

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