UIImage* image;
if(ABPersonHasImageData(self.abRecordRef)){
image = [UIImage imageWithData:(__bridge_transfer NSData *)ABPersonCopyImageData(self.abRecordRef)];
}
-(ABRecordRef) abRecordRef
{
ABRecordRef abR = ABAddressBookGetPersonWithRecordID ([RCABAddressBookHandler addressBook],self.recordID);
return abR;
}
我想把它移到另一个主题。
然而,addressBook的定义是
+(ABAddressBookRef) addressBook
{
return [RCABAddressBookHandler singleton].addressBook;
}
和
它被声明为
@property (nonatomic) ABAddressBookRef addressBook;
这不是类型安全的。
那我该怎么办?
我应该为不同的线程创建新的ABAddressBookRef吗?这是核心数据的方法吗?为不同的线程创建新的nsmanagedobjectcontext?
我能想到的一个解决方案就是为每个线程创建一个新的地址簿
-(ABRecordRef) abRecordRef
{
ABAddressBookRef _addressBook;
_addressBook =ABAddressBookCreate();
ABRecordRef abR = ABAddressBookGetPersonWithRecordID (_addressBook,self.recordID);
CFRelease(_addressBook);
return abR;
}
但这意味着abR将在没有任何ABAddressBookRef的情况下“生存”。它甚至可以吗?
这使得事情变得更加缓慢,因为ABAddressBookCreate实际上是相当的CPU激励。
答案 0 :(得分:1)
文档声明:
重要提示:您必须确保只有一个帖子使用
ABAddressBookRef
的实例。
所以是的,你必须为每个线程创建一个。你可能应该更清楚你的实际问题是什么,然后我们可以建议一些更合适的解决方案。