PerformSelector可能导致泄漏 - 更好的解决方案

reg*_*cob 1 xcode warnings objective-c ios

我有一个自定义BackBarButton,我有一个属性来存储选择器,在某些情况下可以更改.所以我不能非常顺利地使用代表团.

警告说明

如果不将"工作流程"更改为委派,我该怎么做才能摆脱这种警告?该属性使用以下定义:

@property (nonatomic, strong) id<SPUniversalBackBarButtonItemDelegate> delegate;
@property (nonatomic, assign) SEL delegationSelector;
Run Code Online (Sandbox Code Playgroud)

我也尝试使用这段代码,但它说'没有已知的选择器实例方法......'和'IMP的Objective-C指针的隐式对话'......

IMP imp = [[self delegate] methodForSelector:[self delegationSelector]];
void (*func)(id, SEL) = (void *)imp;
func([self delegate], [self delegationSelector]);
Run Code Online (Sandbox Code Playgroud)

wol*_*fan 6

您可以在协议声明中公开您的方法.然后你就可以在不需要选择器的情况下调用它.你不会有这个警告.

要么

如果你只是想摆脱警告:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        //code here will ignore the warning
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)