在 objective-c 中使用 performselector 有什么危险吗?
Any danger using performselector in objective-c?
我在 Crashlytics 上崩溃了几天,上面写着:
libobjc.A.dylib
objc_msgSend
我设法指出了这次崩溃的原因:__NSThreadPerformPerform
在堆栈上稍微搜索一下,它似乎与 performSelector:withObject:afterDelay:
相关联
我的代码一直提到 0 的延迟。我使用此方法通过从我从枚举状态访问的字符串数组动态重新创建选择器来调出我们可以在 iOS 中调用的内容。
基本上这是我到目前为止所获得的所有信息,我了解到 afterDelay: 会使您的调用延迟到下一个 RunLoop。它是否也适用于 performSelector:withObject: 或 afterDelay: 向导致此问题的方法添加某些内容?
最后,真正的问题:
是 performSelector:withObject:afterDelay: 制作函子的好方法,还是像这样使用它很危险,我应该用其他方法吗?
提前致谢,
不要只是假设您的对象仍然存在并且可以执行选择器。先测试一下!
if ([someObject respondsToSelector:@selector(someSelector)]) {
[someObject performSelector:@selector(someSelector) withObject:nil];
}
我在 Crashlytics 上崩溃了几天,上面写着:
libobjc.A.dylib
objc_msgSend
我设法指出了这次崩溃的原因:__NSThreadPerformPerform
在堆栈上稍微搜索一下,它似乎与 performSelector:withObject:afterDelay:
相关联我的代码一直提到 0 的延迟。我使用此方法通过从我从枚举状态访问的字符串数组动态重新创建选择器来调出我们可以在 iOS 中调用的内容。
基本上这是我到目前为止所获得的所有信息,我了解到 afterDelay: 会使您的调用延迟到下一个 RunLoop。它是否也适用于 performSelector:withObject: 或 afterDelay: 向导致此问题的方法添加某些内容?
最后,真正的问题:
是 performSelector:withObject:afterDelay: 制作函子的好方法,还是像这样使用它很危险,我应该用其他方法吗?
提前致谢,
不要只是假设您的对象仍然存在并且可以执行选择器。先测试一下!
if ([someObject respondsToSelector:@selector(someSelector)]) {
[someObject performSelector:@selector(someSelector) withObject:nil];
}