gpt4 book ai didi

ios - performSelector 可能会导致泄漏,因为它的选择器是未知的

转载 作者:行者123 更新时间:2023-12-01 16:05:48 27 4
gpt4 key购买 nike

我收到 ARC 编译器的以下警告:

"performSelector may cause a leak because its selector is unknown".

这就是我正在做的事情:
[_controller performSelector:NSSelectorFromString(@"someMethod")];

为什么我会收到此警告?我知道编译器无法检查选择器是否存在,但为什么会导致泄漏?以及如何更改我的代码以便不再收到此警告?

最佳答案

在 Xcode 4.2 的 LLVM 3.0 编译器中,您可以按如下方式抑制警告:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self.ticketTarget performSelector: self.ticketAction withObject: self];
#pragma clang diagnostic pop

如果您在多个地方遇到错误,并且想使用 C 宏系统来隐藏编译指示,您可以定义一个宏来更容易地抑制警告:
#define SuppressPerformSelectorLeakWarning(Stuff) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
Stuff; \
_Pragma("clang diagnostic pop") \
} while (0)

您可以像这样使用宏:
SuppressPerformSelectorLeakWarning(
[_target performSelector:_action withObject:self]
);

如果您需要执行消息的结果,可以这样做:
id result;
SuppressPerformSelectorLeakWarning(
result = [_target performSelector:_action withObject:self]
);

关于ios - performSelector 可能会导致泄漏,因为它的选择器是未知的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com