在例子中,
@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可能不太容易出错,因为它会使意外混淆上下文或队列变得更加困难.对于经验不足的开发人员来说,这可能是一个更好的主意,因此他们不太可能搞砸了.但保持对象本身肯定没有错,甚至特别危险.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。