我有这样一种情况,我需要调用对象不一定支持的方法,但同时我不能使用 performSelector,因为它限制了可以传递给该方法的参数类型。因此我这样做:
if ([someObject respondsToSelector:@selector(someMethod)])
[(id)someObject someMethod];
编译器很高兴,我很高兴,但是这种消息发送方法有什么注意事项吗?
同步版本的performSelector和上面的有什么本质区别?
编辑:与 (id) 方法相比,performSelector 是否存在性能损失?
最佳答案
这里没有特别的警告。通过强制转换为 id
,您将放弃编译时检查,但无论如何您都在使用 performSelector:
执行此操作。
请注意,如果您使用的是 ARC,编译器将不允许您这样做,除非它看到 some someMethod
的实现。
关于objective-c - 转换为 (id) 以调用 Objective-C 中的任意方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22232546/