我想要做的是:
Product *product = [fetchResult lastObject];
NSString *productID = product.atProductID;
dispatch_async(queue, ^(void){
// Something with productID like
NSLog(@"productID is %@", productID);
});
这样做是否安全,或者我是否需要为我的辅助队列创建另一个上下文并通过其内部 ID 获取产品,然后处理其 atProductID 属性?
更新: 嗯,它表明这实际上是不安全的。一个简单的解决方案是制作一个 productID 字符串的副本:
Product *product = [fetchResult lastObject];
NSString *productID = [product.atProductID copy];
dispatch_async(queue, ^(void){
// Something with productID like
NSLog(@"productID is %@", productID);
});
这将是安全的,因为您不会在后台线程上保留对上下文或其派生的任何引用。这样做的原因是上下文缓存了它从持久存储中获取的数据,并且它自己管理该缓存。而且,无论您是否保留指向该缓存的指针,它都可能更改或销毁它,除非它在上下文的线程上使用。