ios – 对NSManagedObject的属性引用是不安全的吗?

前端之家收集整理的这篇文章主要介绍了ios – 对NSManagedObject的属性引用是不安全的吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在本书 Learning Core Data for iOS中,作者创建了几个UIViewControllers,每个UIViewControllers都有一个引用NSManagedObjectID的属性.

在例子中,

@interface LocationAtShopViewController : UIViewController   
@property (strong,nonatomic) NSManagedObjectID *selectedObjectID;
// ... other properties and methods
@end

通过这种方式,他能够将NSManagedObjectID从一个控制器传递到另一个控制器,并使用NSManagedObjectContext的existingObjectWithID:error:方法检索关联的NSManagedObject对象.

此外,他没有直接设置NSManagedObject对象(即使他已经有一个变量引用),也没有长时间保持对NSManagedObject对象的引用(相反,他在每个需要它的方法中检索它) ).

是否不安全(即在某些情况下会导致崩溃或导致意外行为)通过属性引用直接在控制器之间传递NSManagedObject,或者只是在控制器上保留对它的引用?

在例子中,nonatomic) LocationAtShop *locationAtShop; // ... other properties and methods @end

假设使用了单个共享NSManagedObjectContext,因此忽略了在多个上下文之间传递所导致的问题,这通常是不安全的.

解决方法

没有理由避免直接使用托管对象,前提是:

>您只将托管对象与单个托管对象上下文一起使用,并且
>你要么

>只在单个线程或队列上使用托管对象,或者
>确保在处理其他队列时使用performBlock或performBlockAndWait.

仅保留对象ID可能不太容易出错,因为它会使意外混淆上下文或队列变得更加困难.对于经验不足的开发人员来说,这可能是一个更好的主意,因此他们不太可能搞砸了.但保持对象本身肯定没有错,甚至特别危险.

猜你在找的iOS相关文章