我建议不要在网络中使用线程。虽然看起来还不够清楚,但实现异步网络请求所需的 CPU 时间要少得多。
许多人尝试这样做并最终导致异步网络调用的委托方法未被调用。如果在后台线程上执行网络调用,则线程可能会在委托完成调用之前退出。
只需调用取消/暂停方法即可取消异步调用。
如果你觉得主线程很慢,请确保避免对其进行繁重的操作,例如解析,调用CameraView。
我使用 NSrunLoop 只是为了测试如何做到这一点,没有太多优势
-(void)start
{
[self willChangeValueForKey:@"isExecuting"];
_isExecuting = YES;
[self didChangeValueForKey:@"isExecuting"];
NSURL* url = [[NSURL alloc] initWithString:@"http:your url"];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; // ivar
[request release];
[url release];
// Via the run loop
NSPort* port = [NSPort port];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
[runLoop addPort:port forMode:NSDefaultRunLoopMode];
[connection scheduleInRunLoop: runLoop forMode:NSDefaultRunLoopMode];
[connection start];
[runLoop run];
}
您可以将本机 api 替换为您的库中的。希望这在某种程度上有所帮助。