【问题标题】:NSManagedObject - setting custom instance variables across threadsNSManagedObject - 跨线程设置自定义实例变量
【发布时间】:2014-04-28 03:22:41
【问题描述】:

我有一个 NSManagedObject 类,我为其添加了一个自定义实例变量,方法是使其成为属性并使用 @synthesize(但不在核心数据模型中使用“瞬态”)。如果我设置值并稍后在同一个线程中读取它,这很好用;但是如果我在不同的线程中设置这个属性的值,它仍然会在主线程上显示 nil。

举个例子,想想这个:

@interface Person : NSManagedObject{

}
@property (nonatomic, strong) UIImage *personImage; // unmodeled

如果我在后台线程中设置 personImage 对象,它在主线程上仍然是“nil”。

有没有办法解决这个问题,以便属性实际上跨线程存储值?

【问题讨论】:

    标签: objective-c core-data nsmanagedobject


    【解决方案1】:

    没有办法“修复”它,因为它没有损坏。每个上下文(以及每个线程)都将有一个单独的NSManagedObject 实例。它们是内存中完全不同的对象,不会共享实例变量。您需要在每个实例中初始化该实例变量。

    这就是awakeFromInsertawakeFromFetch 在每个上下文中触发的原因。它使您有机会初始化这些实例变量。

    【讨论】:

    • 谢谢。我想没有办法直接合并来自不同线程的数据,没有一些中间缓存来读/写
    • 正确。如果您要存储图像,则应该有一个位于NSManagedObject 之外的缓存,您的 UI 可以访问该缓存并且您可以控制内存释放等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2013-03-23
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多