我编写了一个测试来使用块来试验 RestKit。我认为RKRequest.onDidLoadResponse
需要包含一个dispatch_async()
调用来获取主 UI 线程上的响应,但令我惊讶的是这会导致运行时异常,所以我把它拿出来,我可以很好地更新界面。
我有问题的代码如下:
- (IBAction)loadSeasons:(UIButton *)sender {
[[RKClient sharedClient] get:@"/api/v1/seasons" usingBlock:^(RKRequest* req) {
req.onDidLoadResponse = ^(RKResponse* res) {
NSLog(@"Request Performed: %@", res.bodyAsString);
self.textResponse.text = res.bodyAsString;
//dispatch_async(dispatch_get_main_queue(), ^{
// NSLog(@"In main queue: %@", res.bodyAsString);
//});
};
}];
}
如果我取消注释该dispatch_async
块,我会得到异常。那么我怎么知道什么时候需要使用它,什么时候不需要呢?我是否应该测试一些东西来告诉我正在执行的代码是否在主线程上?
我是 Objective-C 的新手,对我来说还处于早期阶段,所以我为可能是新手的问题道歉。
更新:当取消注释上面的代码时,会发生以下情况:
- 控制台
(lldb)
以蓝色输出文本,未提供其他信息。 - objc_msgSend中断
libobjc.A.dylib
:is shown in the editor on
0x1c2009b: movl 8(%edx), %ediwith the message in green:
线程 1: EXC_BAD_ACCESS (code=1, address=0x40000008)`。