我需要通过接口创建的对象调用方法,即
id<MyProtocol>obj;
现在我已经在我的主类中创建了这个obj,我没有实现这个协议的方法,但是我需要访问已经在其他类中实现的方法。我现在调用方法如下
[obj load];
在我的主要类applicationDidFinishLaunching中,但我无法访问该方法? 请告诉我通过协议调用方法的正确方法......
答案 0 :(得分:2)
协议什么都不实现。它仅描述了对象应响应的一组消息。您的obj
对象属于某个类。该类需要实现MyProtocol
中描述的方法。
协议不是由特定类实现的。声称符合协议的任何类都必须实现其方法。声称符合协议的任何对象必须属于实现其方法的类。
在您的情况下,obj
是ClassB
,因此ClassB
必须直接或通过继承来实现MyProtocol
描述的方法。
答案 1 :(得分:0)
[obj load]
没问题。如果要关闭编译器,可以将其转换为id
:
[(id)obj load];
但是如果你知道你需要调用-load
方法,也许你应该将-load
方法添加到协议中,或者制作另一个具有-load
方法的协议,例如
@protocol Loadable
-(void)load;
@end
...
id<MyProtocol, Loadable> obj;