我使用以下代码行...
NSString *clientFirstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
Xcode上的“分析”功能表明这会导致潜在的内存泄漏。我根本没有发布clientFirstName,因为我没有alloc
或retain
'。
但是,我意识到ABRecordCopyValue可能没有返回对象,因为像[NSMutableArray arrayWithArray:someArray]
这样的命令可能意味着我确实创建了一个我控制并且必须释放的新对象。
热衷于听到想法......
答案 0 :(得分:3)
答案 1 :(得分:1)
请参阅此链接。它和你的一样:
请参阅 KennyTM :
的回答
ABMultiValueCopyValueAtIndex
是一个“复制”功能,紧随其后 the "Create Rule"。 完成使用后,您需要致电CFRelease
以释放它。NSString *contactEmail = (NSString *)ABMultiValueCopyValueAtIndex(emailInfo, 0); ... if (contactEmail != nil) CFRelease((CFTypeRef) contactEmail);
使用clientFirstName
释放您的对象CFRelease
。
添加以下代码:
if(clientFirstName != nil)
{
CFRelease((CFTypeRef) clientFirstName);
}
注意:不要忘记检查clientFirstName
是否为零。最好在执行任何函数之前检查对象不是nil
,因为它可以避免潜在的崩溃,但不是在这种情况下,但在很多情况下
修改强>
同样@Dondragmer在下面的评论中说:
我甚至认为
[clientFirstName release];
应该解决问题。
如果您需要更多帮助,请与我联系。
希望这会对你有所帮助。
答案 2 :(得分:0)
我不完全理解ObjectiveC引用计数的工作原理,但代码中的一个小更新修复了Analyze警告:
在:
NSString *firstName = (__bridge NSString*) ABRecordCopyValue(person, kABPersonFirstNameProperty);
在
NSString *firstName = (__bridge_transfer NSString*) ABRecordCopyValue(person, kABPersonFirstNameProperty);