2012-11-28 52 views
3

說我創建了一個viewController。然後我想創建另一個像第一個viewController一樣的viewController。看起來像繼承工作。在Objective-c中,我如何製作一種方法,可供所有子類訪問,但無法公開訪問

但是,originalViewController的許多任務都是私有方法,我希望最小化公共接口。

如果我很好地宣佈這些方法是公開的,那麼隱私私密化的目標就沒有實現。

如果我聲明這些方法是私有的,那麼子類不知道這些方法。

如果我爲子類創建一個特殊的.h文件,它會很尷尬。

無論如何,做這種事情的行業標準方式是什麼?

在C++中,我們將使用受保護的方法或函數來完成此權利?

更新:

我把

#import "BGGoogleMap+protected.h" 

@implementation BGGoogleMap() 

@end 

它不工作。它要求標識符。

回答

4

除了Catfish_Man的建議之外,您還可以在您的課堂上製作只有您的小類纔有權訪問的類別。 Here are the docs如何做到這一點。基本上,你只需爲你的類創建一個新的接口,並在其中放置任何私有方法。就像這樣:

@interface MyClass (MyClass_Private) 
// Method declarations 
@end 

把那些在Foo_Internal.h,並且包括Foo_Internal.h在你的子類,但不要把它公開。

+2

如果您想要Apple提供的這個示例,請查看'UIKit/UIGestureRecognizerSubclass.h'。 –

+0

UIKit/UIGestureRecognizerSubclass.h定義了UIGestureRecoqnizer。任何使用子類的類都將包含整個類。我想我失蹤了。 –

+0

嗯,當然,因爲UIGestureRecognizer是在公共標題。但我認爲,羅布認爲這種技術是相同的,但要把它們放在私人標題中。 – user1118321

3

將頭文件拆分爲Foo.h和Foo_Internal.h聽起來像是最好的方法。

+0

你真的這麼做嗎?也可以一個類有不同的.h文件? –

+0

是的,我願意,可以。你將其餘的聲明爲@interface Foo(),是的,用空的parens。見http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ –

+0

我認爲類擴展只能在.m文件中聲明? –

相關問題