正在调用 - [NSRunLoop runUntilDate:]一个好主意?

Jos*_*nez 9 iphone asihttprequest nsrunloop ipad ios

打电话通常是个好主意-[NSRunLoop runUntilDate:]吗?它似乎没有任何问题,但它让我很紧张,告诉运行循环从运行循环内运行.

更多信息:

我现在有一个从REST服务获取数据的项目.需要获得的一个关键信息是具有有效数据的日期范围.它是只需要一次得到的数据非常小一点,所以我决定来处理它的最好办法是让物业下载数据,如果局部变量nil.我正在使用ASIHTTPRequest和一个ASINetworkQueue,所以默认情况下一切都是异步的,为了使这个工作,这个属性在下载和处理数据之前不能返回.这是我的代码的大纲,变量的名称已被更改以保护无辜:

__block BOOL isWorking = YES;
__block ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:/*actual URL*/] autorelease];
[request setCompletionBlock:^{
    // set local variable
    isWorking = NO;
}];
[request setFailedBlock:^{
    // show alert to user
    isWorking = NO;
}];
[queue addOperation:request];

while (isWorking) {
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
Run Code Online (Sandbox Code Playgroud)

再次,这似乎工作正常.使用这种方法有任何潜在的问题吗?

hot*_*aw2 3

您必须确保不要从您正在调用的运行循环调用的任何方法中执行此操作,除非重叠调用树是完全可重入的。

Cocoa Touch UI 代码没有被记录为可重入(事实上,Apple DTS 有警告/提示表明它不是),因此如果您的获取数据处理程序可以以任何方式由 UI 方法(或其他非- 可在 UI 运行循环中调用的可重入代码),不建议从内部调用 UI 运行循环。