2013-01-05 30 views
3

我想在BaseObject中聲明一個方法,而這個方法只能由SubObject實現,我該怎麼做呢?我發現@protected可以用於方法。是否有@protected方法?

+1

一種方法是在第二個頭文件('TheClass_SubclassInterface.h')中聲明「protected」方法並放入一個類擴展(即'@interface TheClass()... @ end')第二個頭部放入類的實現文件('TheClass.m')中,並放入任何需要使用「protected」方法的子類實現文件(TheSubclass.m',其中'TheSubclass:TheClass')。 –

+0

查看「UIGestureRecognizer」的文檔。有一個標記爲「子類化筆記」的部分。這是Nate所指的一個例子。 – rmaddy

回答

5

一種方法是創建一個包含私有接口的類的私人頭文件,像這樣:

//MyClass.h 

@interface MyClass : NSObject 

- (void)publicMethod; 

@end 

//MyClass_private.h 

@interface MyClass() 

- (void)protectedMethod; 

@end 

MyClass.m和它的子類導入規則和_private頭,給_private聲明的同範圍保護。層次結構的客戶只使用常規標題。

4

沒有保護只允許用於變量而不是方法

+0

我知道,我想知道的是,有什麼辦法可以使它像受保護的方法。 – Mil0R3

-1

受保護的方法沒有明確地被objective-c支持。

爲了模擬受保護的方法,我只是不在頭文件中包含函數定義。這允許子類實現該方法,並且不允許將該方法從外部調用(即「受保護」)。解決此

+2

如果子類中的方法的實現需要調用基類中的實現,則這不起作用。 – rmaddy

+0

Brandon,我相信你所描述的是一種「私有」方法,因爲即使派生類也不能調用它。 – Taytay

相關問題