相关疑难解决方法(0)

performSelector可能导致泄漏,因为其选择器未知

ARC编译器收到以下警告:

"performSelector may cause a leak because its selector is unknown".
Run Code Online (Sandbox Code Playgroud)

这是我正在做的事情:

[_controller performSelector:NSSelectorFromString(@"someMethod")];
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此警告?我理解编译器无法检查选择器是否存在,但为什么会导致泄漏?我怎样才能更改我的代码,以便我不再收到此警告?

memory-leaks objective-c ios automatic-ref-counting

1251
推荐指数
15
解决办法
18万
查看次数

防止警告"PerformSelect可能导致泄漏,因为它的选择器未知"

可能重复:
performSelector可能导致泄漏,因为其选择器未知

我做了一个NSDictionary来将我的输入(NSString)转换为选择器."选择器地图"看起来如下:

[self setCmdSelectorMap:[NSDictionary dictionaryWithObjectsAndKeys: 
                         [NSValue valueWithPointer:@selector(doOpenBrowserByString:)], @"openBrowser",
                         [NSValue valueWithPointer:@selector(syncData:)], @"sync",
                         [NSValue valueWithPointer:@selector(getCachedString:)], @"getCachedString",
                         nil]];
Run Code Online (Sandbox Code Playgroud)

当我尝试获取其中一个选择器并按如下方式执行时,它会引发警告:

sel = [[_cmdMap objectForKey:command] pointerValue];
NSLog(@"selector determined : %@", NSStringFromSelector(sel));
[self performSelector:sel withObject:arguments];
Run Code Online (Sandbox Code Playgroud)

警告说:PerformSelector可能导致泄漏,因为它的选择器未知.有没有办法防止这种警告发生?或者是否有任何"更安全"的方式来执行此类操作?

多谢你们 :)

macos objective-c ios

34
推荐指数
1
解决办法
2万
查看次数

我正在使用ARC在Objective-C中编写一个Button类 - 如何在选择器上阻止Clang的内存泄漏警告?

我正在编写一个简单的按钮类,如下所示:

@interface MyButton : NSObject {
  id object;
  SEL action;
}
@property(strong) id object;
@property SEL action;
-(void)fire;
@end


@implementation MyButton

@synthesize object, action;

-(void)fire {
  [object performSelector:action];
}

@end
Run Code Online (Sandbox Code Playgroud)

我从Clang得到以下警告[object performSelector:action]:

PerformSelector may cause a leak because its selector is unknown
Run Code Online (Sandbox Code Playgroud)

经过一些研究后,我发现选择器可以属于具有不同内存要求的系列.目的是使行动失效,因此不应引起任何ARC困难并且应该适合none家庭.

它看起来像我想要的相关预处理器代码片段,或者是以下的变体:

__attribute__((objc_method_family(none)))
Run Code Online (Sandbox Code Playgroud)

但是我在哪里告诉Clang不要担心?

objective-c clang automatic-ref-counting

19
推荐指数
3
解决办法
4593
查看次数