iphone - iOS:使用父类(super class)的 getter 和 setter 的属性不再适用于 Xcode 4.4

标签 iphone objective-c ios xcode properties

我在引用子类的 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/

相关文章:

iphone - NSPredicate 检查数组中的所有项目

iphone - 我可以检查 iPhone 是否已插接吗?

ios - 插页式实现

iphone - 存档可变数组 - doesNotRecognizeSelector 异常

ios - 如何在 Swift 中从 LPLinkMetadata 获取图像 URL

java - 有没有办法在 iphone 上阅读编程语言?

iphone - 这里如何获取和修改一个像素值?

iPhone 在应用程序启动时出现黑屏

ios - UIScrollView 缩放但 subview 保持不变

ios - 获取当前位置两次