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 激励。