我使用下面的代码行...
NSString *clientFirstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
Xcode上的“analyze”功能说这会导致潜在的内存泄漏。我根本不会释放clientFirstName,因为我既没有alloc
也没有retain
。
然而,我意识到ABRecordCopyValue可能不会像[NSMutableArray arrayWithArray:someArray]
这样的命令那样返回一个对象,这可能意味着我确实创建了一个我控制的新对象,并且必须释放。
渴望听到想法...
3条答案
按热度按时间nwwlzxa71#
任何类型的复制都会返回一个
retainCount
为1的对象,所以你需要通过CFRelease()
来release
它。参见文档:
您负责释放此对象。
wfsdck302#
请参考此链接。它与您的相同:
NSString potential leak
参考KennyTM的回答:
ABMultiValueCopyValueAtIndex
是一个“复制”函数,遵循“创建规则”,使用完毕后需要调用CFRelease
释放。使用
CFRelease
释放对象clientFirstName
。添加以下代码:
**注意:**不要忘记检查
clientFirstName
是否不为nil。最好在执行任何函数之前检查对象是否不是nil
,因为它可以避免潜在的崩溃,虽然不是在这种情况下,但在许多情况下编辑
正如@Dondragmer在下面的评论中所说:
我想这也能解决问题:
hpxqektj3#
我并不完全理解ObjectiveC引用计数是如何工作的,但是代码中的一个小更新修复了Analyze警告:
之前:
之后