2

我有一种情况,我需要调用对象不一定支持的方法,但同时我不能使用 performSelector,因为它限制了你可以传递给方法的参数类型。因此我这样做:

if ([someObject respondsToSelector:@selector(someMethod)])
    [(id)someObject someMethod];

编译器很高兴,我很高兴,但是这种消息发送方法有什么注意事项吗?

performSelector 的同步版本和上面的本质区别是什么?

编辑:与 (id) 方法相比, performSelector 是否存在性能损失?

4

1 回答 1

7

这里没有特别的警告。通过强制转换为id您正在丢弃编译器时检查,但无论如何您都在使用performSelector:.

请注意,如果您使用 ARC,编译器不会让您这样做,除非它看到.someMethod

于 2014-03-06T18:14:16.333 回答