我在尝试在线程化 NSOperation 中执行一些核心数据操作时遇到了很多问题。
目前,我在我的应用程序委托中创建了一个托管对象上下文,它纯粹用于我的线程化 NSOperations。我设置了一个最大并发为 1 的 NSOperationQueue,因此每个操作都是连续执行的。对于每个操作(从 Internet 获取数据并创建新的托管对象),我都会将上下文传递给它以供使用。创建新对象后,我保存并重置上下文以供下一个操作使用。但是,我在执行此操作时间歇性地遇到 malloc 错误,并且我花了几天时间试图弄清楚它,这似乎与它的线程化方式有关。
我得到的错误可以在这个相关的堆栈溢出问题中看到。
当我只是将托管对象的属性设置为对象时,会发生 malloc 错误NSNumber
。这也是我第一次设置该属性,所以我没有过度释放自己!我根本想不通,我无法使用 GuardMalloc 重现错误,它只是不会发生!就好像错误发生在其他被触发的地方,但我不知道在哪里!
我所能推断的就是这个错误与我如何设置整个事情有关。我尝试自己运行该操作而不是将其添加到 中NSOperationQueue
,它似乎工作正常(尽管它挂起主线程!)。
当进行保存时,我还需要上下文来通知我的应用程序中的其他上下文,所以我观察它的NSManagedObjectContextDidSaveNotification
通知。但是,由于保存是在 NSOperation (其他线程)中执行的,因此是否会出现问题,因为通知仅在其运行的线程上分派?