我在引用子类的 getter 和 setter 时遇到属性问题:
在基类中,我有一个名为 listItems 的属性和一个自定义 setter :
@interface BaseList{
NSArray *_listItems;
}
@property (nonatomic, retain) NSArray *listItems;
@end
@implementation BaseList
@synthesize listItems = _listItems;
-(void)setListItems:(NSArray *)listItems
{
[_listItems release];
_listItems = [listItems retain];
//... some logic
}
@end
子类有一个属性,该属性具有更具体的列表项名称,例如地址:
@interface AddressList
@property (nonatomic, retain, getter = listItems, setter = setListItems:) NSArray *addresses;
@end
addresses 属性在AddressList 的实现中没有合成,因为它应该使用super 的listItems 属性的getter 和setter。但是,设置后:
self.addresses = [NSArray array];
该属性仍然为零。有趣的是,我相信这适用于早期版本的 Xcode。我目前正在使用 Xcode 4.4 (4.4.1),我不确定我是否只是做错了,或者一些与属性相关的东西是否在这种情况下发生了变化。如果有人能告诉我如何正确执行此操作,我将不胜感激。
最佳答案
Apple 改变了 Xcode 4.4 中访问器的合成方式。您不再需要声明一个 ivar,也不必合成访问器。您仍然当然可以声明自己的 ivar 和合成器,但由于您不这样做,编译器会为您完成。
您可以通过使用 @dynamic
来抑制它。
您可以在build设置中打开名为隐式合成属性 的警告。打开它以暂时获得有关为您合成的所有访问器的警告。
Starting in Xcode 4.4, the Apple LLVM Compiler will implicitly synthesize properties that are not explicitly synthesized using @synthesize. This warning warns about such implicit behavior, even though the property is still synthesized. This is essentially a backwards compatability warning, or for those who wish to continue to explicitly use @synthesize.
关于iphone - iOS:使用父类(super class)的 getter 和 setter 的属性不再适用于 Xcode 4.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12146530/