0

訪問我有以下代碼給出了編譯器錯誤"Instance Variable '_someBool' is prive"合成iVar無法從子類

@interface Foo: NSObject 
@property (assign) BOOL someBool; 
@end 
@implementation Foo 
@end 

@interface Bar: Foo 
@end 
@implementation Bar 
- (BOOL)someBool { 
    // subclass specific getter logic 
    return _someBool; 
} 
@end 

爲什麼我無法訪問被繼承的屬性的存儲?那麼重寫這個getter的正確方法是什麼?

回答

1

吸氣劑只是一種方法,如果你希望覆蓋的方法,並調用其最初實現使用super

- (BOOL)someBool 
{ 
    // subclass specific getter logic 
    return [super someBool]; 
} 

爲什麼我不能訪問該屬性的存儲這是繼承?

它是私人的。如果確實想要從子類訪問存儲,則通過聲明@protected實例變量並使用@synthesise property=variable來指定您自己的存儲。使用super可能會更好。

+0

在我的情況下,超類是在所有方法實現中拋出斷言的「抽象接口」。不能改變這一點。在子類中重寫setter/getter並在那裏添加一個iVar。屬性仍然定義在超級。 –

+0

@AlexBollbach - 如果屬性getter和setter都在「abstract」超類中被定義爲拋出斷言,那麼將不會有任何自動分配的後備變量,因此您不會「失去」空間。如你所做的那樣添加你自己的iVar是一條路。 – CRD

+0

只有getters已經超越了super。 –