respondsToSelector to an id type object

Tap*_*Pal 3 iphone objective-c ipad ios

在我的类中有一个方法可以说它-aMethod:采用id类型参数并对该对象进行一些操作.现在我想调用一个方法来说明-someMethod该对象.但问题是对象类型是id,我不能施放它,因为我不知道哪种类型的对象将来到这里.在我的代码下面,但它显示错误no know instant method for the selector someMethod.任何人都可以帮助处理这种情况.

我不想使用块或委托.

- (void)aMethod:(id)anObject
{
    // other stuff
    if([anObject respondsToSelector:@selector(someMethod)]) [anObject someMethod];
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ami*_*wad 7

您只需以任何方式向编译器显示该方法.你不需要那样输入接收器.(但我会这样做.)我个人更喜欢有一个收集方法的协议.

@protocol MyDelegateProtocol
- (void)someMethod;
@end

// You do not have to use that protocol for typing.
// So you can use your code as you did.
Run Code Online (Sandbox Code Playgroud)

另一种方法是向类添加类别.

@interface AnyClassIncludingNSObject( MyDelegateAddition )
- (void)someMethod;
@end
Run Code Online (Sandbox Code Playgroud)

不要执行这一类.

第三种解决方案是将方法添加到发送消息的类中.

- (void)someMethod {}
Run Code Online (Sandbox Code Playgroud)

它始终是相同的:编译器必须一次看到它.