当我在XCode上构建和分析我的项目时,我在以下行获得了“警告”:
NSString *contactEmail = (NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0);
消息是:在线分配的对象可能发生泄漏...并存储到contactEmail。
该行是否有任何错误?
更新
我用这行代码得到了相同的'警告':
ABMultiValueRef emailInfo = ABRecordCopyValue(person, kABPersonEmailProperty);
但是在这里,我不能这样做:
[emailInfo release];
我正在为iPhone开发。
答案 0 :(得分:7)
ABMultiValueCopyValueAtIndex
是一个“复制”功能,位于the "Create Rule"之后。完成使用后,您需要致电CFRelease
以释放它。
NSString *contactEmail = (NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0);
...
if (contactEmail != nil)
CFRelease((CFTypeRef) contactEmail);
答案 1 :(得分:1)
编辑:为简洁起见:
NSString *contactEmail = [(NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0) autorelease];
(演员可能仍然毫无意义,我不确定编译器如何处理尝试直接向CFTypeRef发送消息。)