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

标签 ios objective-c xcode warnings

我有一个自定义 BackBarButton,我有一个属性来存储在某些情况下可以更改的选择器。所以我不能很顺利地使用委托(delegate)。

Warning description

在不将“工作流程”更改为委派的情况下,我该怎么做才能消除此警告?该属性是通过使用此定义的:

@property (nonatomic, strong) id<SPUniversalBackBarButtonItemDelegate> delegate;
@property (nonatomic, assign) SEL delegationSelector;

我也尝试使用此代码,但它显示“选择器没有已知的实例方法...”和“Objective-C 指向 IMP 指针的隐式对话”...
IMP imp = [[self delegate] methodForSelector:[self delegationSelector]];
void (*func)(id, SEL) = (void *)imp;
func([self delegate], [self delegationSelector]);

最佳答案

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

或者

如果您只想摆脱警告:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        //code here will ignore the warning
#pragma clang diagnostic pop

关于ios - PerformSelector 可能会导致泄漏 - 更好的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28275810/

相关文章:

ios - 如何使用覆盖调整捕获的图像

iOS Coredata 回滚不起作用

ios - Swift 3 和 iOS 10 中的语音识别错误

带有 UIBlurEffect 的 iOS 8 UIVisualEffect View 变得不透明

ios - Minizip Libz Apple Mach-O 链接器 (ld) 错误组

ios - Xcode 构建选项的影响 "Enable bitcode"是/否

ios - 将 cocoapods 添加到成熟的 react native 项目后,我的应用程序存档为单独的应用程序,而不是对现有应用程序的更新

ios - 切换相机后音频/视频不同步

ios - 有条件地构建具有不同 Assets 目录的应用程序

ios - 当用户在 UITextField 中按退格键时从 NSMutableArray 中删除/更新元素