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)
为什么我会收到此警告?我理解编译器无法检查选择器是否存在,但为什么会导致泄漏?我怎样才能更改我的代码,以便我不再收到此警告?
我正在尝试使用Xcode5升级我的应用程序,但在第三方库(MagicalRecord)中遇到了许多"语义问题"."修复"这个的最快方法可能是使用:
#pragma GCC diagnostic ignored "-Wundeclared-selector"
Run Code Online (Sandbox Code Playgroud)
(来自:如何摆脱'未声明的选择器'警告)
编译器指令,但我的直觉说这不是这样做的合适方式.带有上述错误的小代码示例:
+ (NSEntityDescription *) MR_entityDescriptionInContext:(NSManagedObjectContext *)context {
if ([self respondsToSelector:@selector(entityInManagedObjectContext:)])
{
NSEntityDescription *entity = [self performSelector:@selector(entityInManagedObjectContext:) withObject:context];
return entity;
}
else
{
NSString *entityName = [self MR_entityName];
return [NSEntityDescription entityForName:entityName inManagedObjectContext:context];
}
}
Run Code Online (Sandbox Code Playgroud)
其中entityInManagedObjectContext:没有定义方法的地方.
有关如何最好地解决这些类型的错误的任何建议,提前谢谢?!
我有一个父视图控制器和一个子视图控制器.在子视图控制器的视图中,我有一个名为"startButton"的UIButton.到那个按钮,我添加了一个目标,如下所示
[startButton addTarget:[self parentViewController] action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
我在父控制器中实现了test:方法,这对我来说非常好.当点击按钮时,事件从子视图控制器传递到父视图控制器,并且test:method中的代码片段被执行.
但我的问题是,我收到一条警告信息"Undeclared selector test:".我知道,我得到它因为test:没有在子视图控制器实现文件中实现.
有没有办法单独抑制这个警告?我在这里看到的大多数建议都会使整个警告被抑制,但我想单独抑制上面提到的警告.
谢谢