Objective c 为什么要用我的performSelector发出警告
下面是一个简单的PerformSelector,它向obj发送消息以执行循环方法。所有工作正常,但我得到以下黄色警告 PerformSelect可能会导致泄漏,因为其选择器未知 更新——真正的答案 这是特定于ARC的: 简而言之,ARC使用基于命名约定和绑定到选择器的任何附加属性的信息。当通过名称访问选择器并通过Objective c 为什么要用我的performSelector发出警告,objective-c,memory-management,automatic-ref-counting,performselector,Objective C,Memory Management,Automatic Ref Counting,Performselector,下面是一个简单的PerformSelector,它向obj发送消息以执行循环方法。所有工作正常,但我得到以下黄色警告 PerformSelect可能会导致泄漏,因为其选择器未知 更新——真正的答案 这是特定于ARC的: 简而言之,ARC使用基于命名约定和绑定到选择器的任何附加属性的信息。当通过名称访问选择器并通过performSelector:方法系列执行选择器时,该信息将丢失,编译器警告您必须对引用计数进行一些假设,因为这些信息已被删除 简而言之,您发布的特定程序是安全的,但我们鼓励您使用A
performSelector:
方法系列执行选择器时,该信息将丢失,编译器警告您必须对引用计数进行一些假设,因为这些信息已被删除
简而言之,您发布的特定程序是安全的,但我们鼓励您使用ARC友好的替代方案
先前的响应
选择器的声明不需要对当前翻译可见就可以调用它
允许编译器为参数假定默认类型,并为类和实例方法假定返回类型(id
是默认值)
有几个编译器警告可以警告您这些可疑操作
您可能忘记在
@接口中声明选择器循环,或者您可能忽略了冒号,如果它有参数:循环:
将是它的名称。此警告是因为您没有告诉编译器选择器所在的位置,导入文件所在的位置或将选择器添加到头文件中它应该所在的位置选择器是MyClass中的类方法。我已将#import“MyClass.h”放在main的顶部-您是否已在您的MyClass.h中声明?编译器只知道预先声明到某行的内容或通过某些库包含的内容是,该方法已在头文件中声明-我刚刚进行了编辑以显示所有文件确定如果([obj respondsToselecto:mySel]),请执行此操作{[obj performSelector:mySel];}谢谢你的帮助,但作为一个新手,我仍然有点困惑。如果可能的话,你能解释一下或者更好地发送一个例子,说明你不声明当前翻译的意思。循环方法在接口中,不需要冒号,因为它不接受任何参数(它只是注销一个字符串)@pete谢谢你扩展你的帖子。我已经用一个真实的答案更新了它。这就解释了它。是的,我已经打开了ARC。谢谢
#import "MyClass.h"
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
MyClass *obj = [[MyClass alloc]init];
SEL mySel = @selector(looping);
[obj performSelector:mySel];
}
return 0;
}
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
-(void)looping;
@end
#import "MyClass.h"
@implementation MyClass
-(void)looping{
NSLog(@"Hey, i'm looping");
}
@end