自定义setter / getter中的属性属性

时间:2012-09-17 09:12:30

标签: iphone objective-c ios xcode cocoa

如果我创建属性,例如:

@property NSString *selectedSubProductId;

并创建setter和getter:

- (NSString *)selectedSubProductId {}

- (void)setSelectedSubProductId:(NSString *)value_ {}

XCode说"Deault property attribute 'assign' not appropriate for non-gc object"。在这种情况下,属性是否有任何意义?如果我将它们设为copyassign,或仅仅是@synthesize创建所需方法的提示,这是否重要?如果是这样,我应该如何禁用警告?

2 个答案:

答案 0 :(得分:1)

如果是对象,则应使用retain / copy属性修饰符。

例如:

@property (nonatomic, retain) NSString *selectedSubProductId;

如果缺少修饰符,则默认启用assign修饰符。但它仅对标量(intfloat ...)或struct有效。

您可以在Apple Documentation

中获得更多详细信息

答案 1 :(得分:0)

该警告表示您正在使用默认属性属性(assign),因为您忘记说您想如何保留对象。

如果要“删除”警告,请使用保留/复制属性:     @property (copy) NSString *selectedSubProductId;

但是,在Strings中你应该使用副本。有关详细信息,请visit this question on stackoverflow.