我收到警告
PerformSelector可能会导致泄漏,因为它的选择器未知。
代码中的:
- (void) callDelegate: (SEL) selector withArg: (id) arg error: (NSError*) err
{
assert([NSThread isMainThread]);
if([delegate respondsToSelector: selector])
{
if(arg != NULL)
{
//this line the warning
[delegate performSelector: selector
withObject: arg
withObject: err];
}
else
{
//this line the warning
[delegate performSelector: selector
withObject: err];
}
}
else
{
NSLog(@"Missed Method");
}
}头:
@interface Topscore : UIViewController <NSObject> {
//
}发布于 2012-01-07 21:44:18
这是编译器生成的警告,因为在编译和启用自动引用计数(ARC)时使用了- was声明-选择器。通常,这可以被安全地忽略,因为很明显,名为" selector“的变量中的选择器在编译时是未知的,因为它将在运行时分配其值。
发布于 2012-01-07 23:18:15
您的if ... respondsToSelector: selector无法工作,因为您的selector只是该方法的名称。对于你的案子,你需要检查
if ([delegate respondsToSelector: @selector(method::)]而对于另一个案例,仅针对method:。
总之,你可以压制这样的警告:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:nextView];
#pragma clang diagnostic pop发布于 2012-02-08 22:30:39
您还可以使用objc_msgSend而不是performSelector,正如所描述的here。
https://stackoverflow.com/questions/8773226
复制相似问题