Objective-C基类属性自定义Getter不从子类调用

时间:2015-03-12 15:59:05

标签: objective-c inheritance properties getter

基类接口:

@interface Base : NSObject

@property (nonatomic, readonly, getter=getPriceForListing) double_t priceForListing;

@end

基类实施:

@implementation Base

-(double_t)getPriceForListing
{
    if (self.listPriceLow > 0 && self.listPriceHigh > 0)
    {
        return self.listPriceLow;
    }
    else if (self.listPriceLow > 0)
    {
        return self.listPriceLow;
    }
    else if (self.listPriceHigh > 0)
    {
        return self.listPriceHigh;
    }
    else
    {
        return self.currentPrice;
    }
}

@end

子类接口:

@interface Subclass : Base

@end

子类实施:

@implementation Subclass

@dynamic priceForListing;

@end

如何使用子类:

Subclass *sub = [[Subclass alloc] init];
NSLog(@"%@", sub.priceForListing);

我遇到的问题是sub.priceForListing总是返回零,并且永远不会调用基类getter,至少没有在那里遇到断点。

1 个答案:

答案 0 :(得分:4)

你定义了" getter"作为getPriceForListing,但正尝试使用priceForListing访问它。只需省略自定义名称。

重命名" getter"方法priceForListing

如果没有后备实例变量,IOW永远不会设置,您可以将其指定为readonly

如评论中所述:删除:@dynamic priceForListing;

仅供参考:在Objective-C / Cocoa中," get"对于通过引用返回值的方法,按照约定保留前缀。吸气者没有"得到"前缀。