0

我在模拟器和设备上看到了这个僵尸问题:

  • [非类型类]:消息发送到已释放实例 0x5bf9450

产生这个问题的代码再简单不过了。

+ (void) testAllocateAndDeallocteAddressBook
{
  ABAddressBookRef addressBookRef = ABAddressBookCreate();

  NSAssert(addressBookRef != NULL, @"ABAddressBookCreate() returned NULL");

  CFRelease(addressBookRef);

  return;
}

我不明白为什么这个 CFRelease() 会导致这个错误。我读过的关于这个 URL 的所有 Apple 文档都表明应该调用 CFRelease() 来释放引用。

4

1 回答 1

0

也许这就是这里的问题。这是来自苹果页面上的讨论。

只有在使用 ABAddressBookSave 保存地址簿后,对返回的地址簿所做的更改才会反映在地址簿数据库中。

在 iOS 6.0 及更高版本上,如果调用者无权访问通讯簿数据库:

对于链接到 iOS 6.0 及更高版本的应用程序,此函数返回 NULL。 对于与早期版本的 iOS 链接的应用程序,此函数返回一个空的只读数据库。

于 2012-10-23T05:19:43.017 回答