NSString潜在泄漏

时间:2010-04-14 14:22:16

标签: iphone objective-c memory-leaks

当我在XCode上构建和分析我的项目时,我在以下行获得了“警告”:

NSString *contactEmail = (NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0);

消息是:在线分配的对象可能发生泄漏...并存储到contactEmail。

该行是否有任何错误?

更新

我用这行代码得到了相同的'警告':

ABMultiValueRef emailInfo = ABRecordCopyValue(person, kABPersonEmailProperty);

但是在这里,我不能这样做:

[emailInfo release];

我正在为iPhone开发。

2 个答案:

答案 0 :(得分:7)

ABMultiValueCopyValueAtIndex是一个“复制”功能,位于the "Create Rule"之后。完成使用后,您需要致电CFRelease以释放它。

NSString *contactEmail = (NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0);
...
if (contactEmail != nil)
  CFRelease((CFTypeRef) contactEmail);

答案 1 :(得分:1)

  1. 演员阵容有些无意义。
  2. 该行可能会泄漏,除非您在某处释放或自动释放它。
  3. 编辑:为简洁起见:

    NSString *contactEmail = [(NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0) autorelease];
    

    (演员可能仍然毫无意义,我不确定编译器如何处理尝试直接向CFTypeRef发送消息。)