美文网首页
知识点!!!NSString用copy和strong修饰的区别

知识点!!!NSString用copy和strong修饰的区别

作者: 早起的大艺术家 | 来源:发表于2017-08-28 11:38 被阅读0次

废话不多说直接上例子。结果在下边!!!!!

用strong修饰:

@interface ViewController ()

@property(nonatomic,strong)NSString *str1;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

NSMutableString *str2 =[NSMutableString stringWithString:@"111"];

self.str1 = str2;

NSLog(@"str1:%@",self.str1);

[str2 appendString:@"22"];

NSLog(@"str1:%@",self.str1);

}

打印结果:

2017-08-28 11:15:10.273 20170828demo[2789:529874] str1:111

2017-08-28 11:15:10.273 20170828demo[2789:529874] str1:11122

用copy修饰:

@interface ViewController ()

@property(nonatomic,copy)NSString *str1;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

NSMutableString *str2 =[NSMutableString stringWithString:@"111"];

self.str1 = str2;

NSLog(@"str1:%@",self.str1);

[str2 appendString:@"22"];

NSLog(@"str1:%@",self.str1);

}

打印结果:

2017-08-28 11:16:17.009 20170828demo[2823:536589] str1:111

2017-08-28 11:16:17.009 20170828demo[2823:536589] str1:111

如果用可变字符串给str1赋值,用copy会对str1做深拷贝,这样str2改变str1不变。用strong只是引用计数加一,并不做深拷贝。所以为了保障str1的值不被改变用copy修饰。当然如果你确定str1未来接受的字符串是不可变类型,用strong也无妨。

像这样:

@interface ViewController ()

@property(nonatomic,strong)NSString *str1;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

NSString *str2 =@"111";

self.str1 = str2;

NSLog(@"str1:%@",self.str1);

str2 = @"222";

NSLog(@"str1:%@",self.str1);

}

打印结果:

2017-08-28 11:28:56.649 20170828demo[2948:602140] str1:111

2017-08-28 11:28:59.107 20170828demo[2948:602140] str1:111

如果你对性能要求特别高,或者是个代码极客。。那么能用strong就不用copy,毕竟copy修饰时,set方法中会多出对copy的相关操作。

切记!!!!!!!!!!!!!!

复制一定要用self,因为self相当于[self setStr1:str2] 会调用set方法,set方法里面有玄机。如果用_str 是得不到这个结果的。

相关文章

网友评论

      本文标题:知识点!!!NSString用copy和strong修饰的区别

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