non*_*ive 12 cocoa objective-c asihttprequest grand-central-dispatch
我目前正在使用带有GCD队列的同步ASIHTTPRequest从Internet下载数据,然后使用JSONKit解析响应数据.您如何看待这种模式?先感谢您.
这是我的代码:
dispatch_async(queue, ^(void) {
// Request is ASIHTTPRequest.
[request startSynchronous];
// Parse JSON.
NSArray *array = [[request responseData] objectFromJSONDataWithParseOptions:JKParseOptionLooseUnicode];
// Callback on the main queue to update UI.
dispatch_async(dispatch_get_main_queue(), ^(void) {
callbackBlock(array);
});
});
Run Code Online (Sandbox Code Playgroud)
编辑:我使用ASIHTTPRequest的原因是我需要修改OAuth的请求标头并使用POST方法上传图像.
hoo*_*oop 12
所以你替换了这个
- (void)doDownload {
NSURL *url = [NSURL URLWithString:@"http://foobar.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
connection = [[NSURLConnection alloc] initWithRequest:aURLRequest delegate:self];
receivedData = [[NSMutableData data] retain];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[_receivedData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSArray *array = [_receivedData objectFromJSONDataWithParseOptions:JKParseOptionLooseUnicode];
callbackBlock(array);
}
Run Code Online (Sandbox Code Playgroud)
有了这个 -
- (void)doDownload {
NSURL *url = [NSURL URLWithString:@"http://foobar.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^(void) {
[request startSynchronous];
NSArray *array = [[request responseData] objectFromJSONDataWithParseOptions:JKParseOptionLooseUnicode];
// Callback on the main queue to update UI.
dispatch_async(dispatch_get_main_queue(), ^(void) {
callbackBlock(array);
});
});
}
Run Code Online (Sandbox Code Playgroud)
和从ASIHTTPRequest 10,000+行代码.
它带给你什么?
NSURLConnection完全异步,使用GCD,缓存,自动压缩/解压缩等.
出于这个原因,并且完全依赖于您提供的(可能不完整的)信息,我会说这是一段非常糟糕的代码.
当然,上下文就是一切 - 你可能有一个非常非常非常好的理由来重新实现Apple提供的已有的Library代码功能.
| 归档时间: |
|
| 查看次数: |
6096 次 |
| 最近记录: |