objective-c - 转换为 (id) 以调用 Objective-C 中的任意方法

标签 objective-c performselector respondstoselector

我有这样一种情况,我需要调用对象不一定支持的方法,但同时我不能使用 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/

相关文章:

ios - UIDeviceOrientationDidChangeNotification 多次调用

ios - 按国家/地区代码将 NSDecimalNumber 格式化为货币,且不损失精度

iOS 从 subview 访问父 View 元素

objective-c - 使用 respondsToSelector 的性能损失

ios - 检查 CIFilter 在当前 iOS 中是否可用

ios - 从 xml 内容字符串访问关键字

objective-c - Obj-C 枚举重新定义错误

ios - performSelector:withObject 仅在 iPad 上发送错误的对象

ios - 如何阻止 UIView 中断 performSelector