@interface PaneBean : NSObject
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *type;
@property(nonatomic,assign) NSInteger width;
@end
Run Code Online (Sandbox Code Playgroud)
我有一个如上所示的PaneBean.
我是应该使用@property(nonatomic,copy)还是@property(nonatomic,strong)为了我(NSString *) name?他们之间有什么区别?
为NSInteger编写'assign'是正确的吗?
任何帮助表示赞赏.谢谢!
Cat*_*Man 15
'copy'将导致该属性的setter创建对象的副本,否则与strong相同.您可以使用它来确保如果有人将您的属性设置为可变字符串,然后改变字符串,您仍然具有原始值.如果字符串不可变,Cocoa将默默地优化复制操作,这很好:)
'strong'将保持房产的价值,直到它被设置为别的东西.如果你想让传入的可变字符串从你下面改变(不是不可能的,但不是所有那些常见的,想要的东西),那么强者就是正确的做法.通常,强对于表示比简单"值"更复杂的对象(即不是NSString,NSNumber,NSValue等等)更有用.
'assign'是整数的默认设置(实际上只是).无法像对象一样保留或复制整数.
小智 7
对于类型为符合NSCopying协议的不可变值类的属性,您几乎总是应在@property声明中指定copy.在这种情况下,指定retain是你几乎从不想要的东西.在非ARC中,strong会像retain一样工作
这就是你想要这样做的原因:
NSMutableString *someName = [NSMutableString stringWithString:@"Chris"];
Person *p = [[[Person alloc] init] autorelease];
p.name = someName;
[someName setString:@"Debajit"];
Run Code Online (Sandbox Code Playgroud)
Person.name属性的当前值将根据属性是声明为retain还是copy而不同 - 如果属性标记为retain,则为@"Debajit",如果属性标记为copy,则为@"Chris".
因为在几乎所有情况下,您都希望防止在其背后改变对象的属性,所以应该标记表示它们的属性.(如果你自己编写setter而不是使用@synthesize,你应该记得实际使用copy而不是retain.)
| 归档时间: |
|
| 查看次数: |
9810 次 |
| 最近记录: |