gpt4 book ai didi

ios - iOS地址簿的奇怪内存泄漏

转载 作者:行者123 更新时间:2023-11-28 17:39:42 25 4
gpt4 key购买 nike

我的一项功能中有以下功能可以复制手机上的联系人:

    ABAddressBookRef addressbook = ABAddressBookCreate();
if(self.contacts != nil)
[contacts release];
self.contacts = (NSArray *)ABAddressBookCopyArrayOfAllPeople(address book);

contacts 是一个在类中声明的 NSArray,retained,synthesized 等。然后在另一个 View Controller 中使用该数组:

    if (!self.contactsViewController) {
self.contactsViewController = [[[contactsViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil] autorelease];
}
self.contactsViewController.contacts = self.contacts;
[self.navigationController pushViewController:self.contactsViewController animated:YES];

我知道你应该释放地址簿,但当我这样做时,复制到 viewController 的联系人只剩下他们的名字;当我用 ABPersonViewController 调用它们时,所有电话号码和电子邮件都消失了。另一方面,当我不释放地址簿时,它工作正常,但整个地板都在泄漏内存。这是怎么回事,我该如何解决?

最佳答案

您不应该释放 ABAddressBookCreate 返回的地址簿。按照约定,创建和返回对象的方法应该使其成为autorelease

但是,行

self.contacts = (NSArray *)ABAddressBookCopyArrayOfAllPeople(address book);

肯定是漏水了。为什么?因为 ABAddressBookCopyArrayOfAllPeople 正在创建一个新对象,您将再次保留该对象:self.contacts =。所以你应该改变它

contacts = (NSArray *)ABAddressBookCopyArrayOfAllPeople(address book);

或使用另一种不会创建新联系人数组的方法。

关于ios - iOS地址簿的奇怪内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8634381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com