對(duì)于NSString對(duì)象的修飾常有Copy和Strong兩種形式.但具體是Copy還是Strong,我們從兩個(gè)方面來(lái)分析:
一.安全:
strong明顯是淺拷貝,而Copy具體是深拷貝還是淺拷貝具體要看被拷貝的對(duì)象,首先上代碼:
```
@interface ViewController ()
@property(nonatomic,copy) NSString *str;
@property(nonatomic,strong) NSString *mutableStr;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableString *sourceStr = [NSMutableString stringWithFormat:@"abc"];
self.str = sourceStr;
self.mutableStr = sourceStr;
NSLog(@"%@--------%@",self.str,self.mutableStr);
[sourceStr appendString:@"def"];
NSLog(@"%@--------%@",self.str,self.mutableStr);
}
輸出結(jié)果為:
2017-09-01 15:58:29.775 LswTest[19073:5731417] abc--------abc
2017-09-01 15:58:29.775 LswTest[19073:5731417] abc--------abcdef
```
從上面的代碼中我們可以清楚看出sourceStr對(duì)象的修改影響了self.mutableStr,而沒(méi)有影響self.str,這是因?yàn)镾trong是指針拷貝也就是淺拷貝,并沒(méi)有開(kāi)辟新的內(nèi)存,sourceStr改變了,意味著self.mutableStr指向的內(nèi)存地址的對(duì)象也改變了.而self.str用copy修飾,開(kāi)辟了新的內(nèi)存空間,sourceStr的改變并不能影響新開(kāi)辟的內(nèi)存對(duì)象
二.效率:
但是使用copy對(duì)象也不一定就比strong好,因?yàn)閏opy可能會(huì)對(duì)修飾的對(duì)象進(jìn)行深拷貝(意味著開(kāi)辟內(nèi)存),這是非常費(fèi)性能.所以盡量在使用中藥區(qū)別對(duì)待,對(duì)于賦值對(duì)象為NSMutableString類型可以用copy,NSString類型還是用strong吧