我正在将合作伙伴提供的代码添加到我的iOS项目中,该项目调用class_createInstance
,然后在返回之前调用autorelease
,如下所示:
Class functionClass = objc_getClass(functionName);
NSObject* functionObject = class_createInstance(functionClass, 0);
[[functionObject performSelector:@selector(initWithDictionary:) withObject:msg] autorelease];
在Xcode 4.0.2中运行Analyze时,我在最后一行收到以下警告:
Object sent -autorelease too many times
问题1: 该对象如何被多次发送自动发布?
我对class_createInstance
的理解是我需要释放它返回的值。
问题2: 如果代码正确,我该如何避免分析警告?
我们有一个非常严格的政策,不要检查任何分析警告。
答案 0 :(得分:1)
这是一个非常奇怪的模式,因此,分析仪根本不知道它。 class_createInstance()
的使用极为罕见。
两个可能的解决方案:
使用预处理器标记告诉分析器,是的,实际上,functionObject是一个保留的引用(我没有标记方便 - 你会在发行说明或llvm中找到它.org网站或搜索系统标题)。
请勿使用class_createInstance()
。一旦您有了对该类的引用,只需使用+alloc
。更好的是,将整个表达式重写为[[objc_getClass(functionName) alloc] initWithDictionary:msg]
并完成它。
您还应该通过http://bugreporter.apple.com提交错误,因为虽然很奇怪,但静态分析器不应该对此进行限制。