【发布时间】:2012-03-30 22:40:38
【问题描述】:
我正在开发一个必须从 iOS4 运行的 iOS 项目。我有一个 NSOperationQueue 并添加了一个操作。操作的主要方法如下所示:
-(void)main
{
[self.client getStuffSuccess:^(Stuff *s) {
//Do something on success
} failure:^(NSError *error) {
//Do something on failure
}
}
block里面的代码只有在getStuff调用成功或者失败时才会被调用。我认为与此同时,我的操作将从 NSOperationQueue 中删除,并且不会调用该块。但是,我对其进行了测试,并且实际上调用了该块。无论客户端是在 dispatch_get_main_queue 上还是在调用它的线程上调用成功块,都会调用它——在本例中为上述操作。
在调用块之前,方法 isFinished 实际上返回 true(我覆盖了 isFinished 方法并检查了值),所以有人可以解释一下如何调用块吗?
我之所以问这一切,是因为虽然这对于一次调用来说很好,但当我在几百次迭代的循环中添加它时,我会得到一个 EXC_BAD_ACCESS,理解上述内容可能会帮助我进行调试。
【问题讨论】:
-
getStuffSuccess:failure 是同步的还是异步的?
标签: objective-c ios objective-c-blocks nsoperation nsoperationqueue