2010-02-16 18 views
2

我有一個協議說如何創建協議對象,以便我可以在Objective-C中調用它的方法?

@protocol MyProtocol 
-(void)mload 
@end 

與方法mload,我也有ClassA的已實施了協議方法即MLOAD。

@implementation ClassA 
-(void)mload { 
    NSLog(@"ClassA-mload"); 
} 
@end 

現在我需要在另一個類中調用該方法,使用ClassA的一個實例說ClassB。怎麼做?

+0

究竟什麼是'obj'?一個'ClassA'的實例?協議對象('@protocol(MyProtocol)')?如果後者,如果協議可以聲明多個方法,那麼如何決定調用哪個方法? – outis 2010-02-16 04:02:36

+0

obj是一個協議對象 id obj; 現在我必須調用ClassB中的mload方法.. – Cathy 2010-02-16 04:14:20

+0

「協議對象」是類協議的一個實例;它與實現協議的類的實例不同。 'id obj'要清楚得多。 – outis 2010-02-16 08:46:38

回答

4

ClassB這樣的事情,不知道如何你要參考ClassA OBJ,但是:

// obj is of type that implements protocol 
id<MyProtocol> obj = [[ClassA alloc] init]; 
[obj load]; 


// should work as well because objective-c is dynamically typed so you can call 
// any method on an object 
id obj = [[ClassA alloc] init]; 
[obj load]; 
+0

感謝您的回覆,我現在試了一下,這給了我一個異常,因爲NSInvalidArgumentException和[ClassB mload]:發送給實例的無法識別的選擇器。如何解決問題? – Cathy 2010-02-16 04:09:38

+0

你在'ClassB'中實現了'mload'嗎? – mipadi 2010-02-16 04:37:13

+0

嗨stefanB現在我得到了輸出..謝謝.. – Cathy 2010-02-16 04:42:56

相關問題