【发布时间】:2016-09-23 14:55:28
【问题描述】:
我有一个 Realm 对象 (LFEMemory),它有一个发布方法。
当我调用发布方法时,我必须将图像上传到 AWS,然后使用 Amazon 返回的 URL 更新对象。
问题是当块从 AWS 返回时,我自己的 LFEMemory 对象不再是线程安全的。 (事实上,它通常是在应用程序的正常运行期间,但如果我使用的是应用程序扩展,则不会)。
我可以通过从领域对象中删除发布方法并在控制器对象中处理它来解决此问题,该控制器对象可以在新线程上获取新领域对象。但这意味着我每次调用块时都需要创建新领域,这肯定不是一个好习惯。
大多数人如何处理这种情况?
- (void)publishWithBlock:(ResultBlock)block {
FileUploadManager *manager = [[FileUploadManager alloc] init];
[manager uploadWithSuccess:^(NSString *filename) {
//self is no longer thread-safe and will cause a crash
self.media.path = filename;
} failure:^(NSError *error) {
block(NO, error);
};
}
【问题讨论】:
标签: objective-c multithreading realm