我正在开发一个 iPhone 应用程序。在应用程序中,我需要从 Web 加载大量数据 (JSON),然后相应地创建视图。请建议我如何进行。
基本上我正在做的是
1. 从数组加载一个 json 网络服务。
2. 上面收到的数组包含指向其他 Web 服务的 url。可以说,8
3. 所以现在我需要调用 8 个 Web 服务,在获取之后,我必须解析数据,然后将其显示给用户。
这是我第一次处理网络服务。所以不知道该怎么做。
主要问题是时间消耗。如何在其中实现多线程?
请提出任何可以帮助我的想法或链接。
我正在开发一个 iPhone 应用程序。在应用程序中,我需要从 Web 加载大量数据 (JSON),然后相应地创建视图。请建议我如何进行。
基本上我正在做的是
1. 从数组加载一个 json 网络服务。
2. 上面收到的数组包含指向其他 Web 服务的 url。可以说,8
3. 所以现在我需要调用 8 个 Web 服务,在获取之后,我必须解析数据,然后将其显示给用户。
这是我第一次处理网络服务。所以不知道该怎么做。
主要问题是时间消耗。如何在其中实现多线程?
请提出任何可以帮助我的想法或链接。
我会做什么:
NSThread和相应@autoreleasepool的加载第一个 jsonNSMutableArray像这样的东西?(没有测试过):
#import "JSONKit.h"
- (void)viewDidLoad {
[super viewDidLoad];
[NSThread detachNewThreadSelector:@selector(_loadJSON) toTarget:self withObject:nil];
};
-(void)_startNewThread {
@autoreleasepool {
NSError *error = nil;
/*
main json file:
[
{ "url": "http://domain.com/file2.json" },
{ "url": "http://domain2.com/file.json" },
{ "url": "http://domain3.com/file.json" }
]
*/
NSMutableArray *mainUrls = [[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://domain.com/file.json"] encoding:NSUTF8StringEncoding error:&error] mutableObjectFromJSONString];
NSMutableArray *returnArray = [[NSMutableArray alloc] init];
if (error == nil) {
while ([mainUrls count]) {
NSURL *url = [NSURL URLWithString:[[mainUrls objectAtIndex:0] objectForKey:@"url"]];
NSDictionary *dictionary = [[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error] objectFromJSONString];
if (error == nil) {
[returnArray addObject:dictionary];
}
[mainUrls removeObjectAtIndex:0];
}
}
[returnArray autorelease];
[self performSelectorOnMainThread:@selector(_finished:) withObject:[NSArray arrayWithArray:returnArray] waitUntilDone:YES];
}
}
-(void)_finished:(NSArray *)__array {
NSLog(@"Result: %@", __array);
}