objective-c - 执行选择器可能会导致泄漏解决方法快速崩溃

标签 objective-c swift performselector

我遇到一种情况,我想在目标上调用一个方法,在该目标上调用执行选择器会出现错误:PerformSelector 可能会导致泄漏,因为其选择器未知

为了解决这个问题,我正在使用this SO question中的优秀解决方案。 :

if (self.target) {
    IMP imp = [self.target methodForSelector:self.selector];
    void (*func)(id, SEL, id) = (void *)imp;
    func(self.target, self.selector, argument);
}

现在这段代码是我在 Swift 项目中使用的框架的一部分,它导致了崩溃。

如果我忽略警告并使用 [self.target PerformSelector:self.selector withObject:self.argument]; 它工作正常。

所以... 我假设这与基本的 Swift 与 Objective-C 消息发送架构有关。请有人告诉我 a) 发生了什么事? b) 如何解决它。

最佳答案

发送消息的最直接方式(假设它采用一个对象参数并且不返回任何内容)是:

void (*func)(id, SEL, id) = (void (*)(id, SEL, id))objc_msgSend;
func(self.target, self.selector, self.argument);

关于objective-c - 执行选择器可能会导致泄漏解决方法快速崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174628/

相关文章:

ios - NSError 对象已经在第一次方法调用时填充

objective-c - CTFrame 在边缘丢弃字形

swift - 在延迟初始化 swift 中访问继承的对象

ios - 如何在没有很多 xib 的情况下显示多个 View Controller

objective-c - UIView 子类 : performSelecter:withDelay: say 5 secs but the view is removed at 3rd sec?

ios - 如何在Xcode中配置和运行 objective-c 测试用例--XCTest

ios - 将两个以上的参数传递给选择器,该选择器由字符串组成

ios - 具有多个参数错误的 performSelector afterDelay

objective-c - cancelPreviousPerformRequestsWithTarget 不工作

iphone - 在创建之前的表后添加新的起始 View - 不起作用