之前学习生活中,知道NSString的属性要用copy而不用retain,可是不知道为啥,这两天我研究了一下,然后最终明确了.
详细原因是由于用copy比用retain安全,当是NSString的时候,其有用copy和retain都行,当用NSMutableString,那么就要用copy,NSMutableString的值不会被改动,而用retain的时候,NSMutableString的值会被改动,详细情况,能够看以下的代码:
#import <Foundation/Foundation.h> //协议有两种方式,第一是以ing结尾形式,第二,以delegate结尾形式 @interface person : NSObject<NSCopying> @property (nonatomic,copy)NSString * name;
person * p = [[person alloc]init]; NSMutableString * name = [[NSMutableString alloc]initWithString:@"hello"]; p.name = name; [name appendString:@" word"]; NSLog(@"%@",p.name);
打印后结果是
2014-07-05 17:08:44.170 DepthCopy[1399:303] hello Program ended with exit code: 0
再看以下用retain
#import <Foundation/Foundation.h> //协议有两种方式,第一是以ing结尾形式,第二,以delegate结尾形式 @interface person : NSObject<NSCopying> @property (nonatomic,retain)NSString * name;
person * p = [[person alloc]init]; NSMutableString * name = [[NSMutableString alloc]initWithString:@"hello"]; p.name = name; [name appendString:@" word"]; NSLog(@"%@",p.name);
打印结果是:
2014-07-05 17:13:19.531 DepthCopy[1412:303] hello word Program ended with exit code: 0
我们能够发现结果被改变了,成为了hello word;
所以,由以上代码,能够看出copy比retain安全,也就能明确为啥NSString的属性要用copy而不用retain了;