在objective-c中使用performselector有任何危险吗?

时间:2016-10-13 07:30:23

标签: ios objective-c performselector

我在Crashlytics的崩溃中被困了几天,说:

libobjc.A.dylib

objc_msgSend

我设法指出了这次崩溃的原因: __ NSThreadPerformPerform

在堆栈上进行一点搜索后,它似乎与 performSelector:withObject:afterDelay:

相关联

我提到的代码一直提到 0 的延迟。我使用这种方法通过从枚举状态访问的字符串数组中动态重新创建选择器来调用我们在iOS中称为“functor”的内容。

基本上这是我迄今为止的所有信息,我了解到 afterDelay:会将您的呼叫延迟到下一个RunLoop。是否也适用于 performSelector:withObject: afterDelay:会在导致此问题的方法中添加内容?

最后,真正的问题是:

是performSelector:withObject:afterDelay:制作仿函数的好方法,或者像这样使用它是危险的,我应该采取其他任何方式吗?

提前致谢,

1 个答案:

答案 0 :(得分:0)

不要只是假设你的对象仍然存在并且可以执行选择器。先测试一下!

if ([someObject respondsToSelector:@selector(someSelector)]) {
   [someObject performSelector:@selector(someSelector) withObject:nil];
}