运行静态分析器上这一段代码:

- (id) readForeignPref
{
 CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
 return [(id)matchStyle autorelease];
}

产生以下警告:

  

呼叫FUNCTION“CFPreferencesCopyAppValue”返回一个核心基础对象与1保留计数(拥有参考)。核心基础对象不会自动垃圾收集。

这是一个警告我应该事端难看这样固定:

- (id) readForeignPref
{
 CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
 id nsMatchStyle = [(id)matchStyle copy];
 if (matchStyle) {
  CFRelease(matchStyle);
 }
 return [nsMatchStyle autorelease];
}

或者这只是一个假阳性,因为复制的对象是免费电话桥接?

有帮助吗?

解决方案

尝试这种情况:

- (id) readForeignPref
{
      CFPropertyListRef matchStyle = CFPreferencesCopyAppValue(CFSTR("PBXFindMatchStyle"), CFSTR("com.apple.Xcode"));
      return [(id)CFMakeCollectable(matchStyle) autorelease];
}

如果没有CFMakeCollectable,这将在GC泄漏,因为一个CFRetain是除ObjC -retain不同。甲CFRetain禁用该对象的垃圾收集,并且需要CFMakeCollectable启用它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top