iphone - 我可以使用后台线程解析数据吗?

标签 iphone objective-c multithreading xcode

我正在使用chcsvparser在应用启动时解析来自csv文件的数据。在主线程上启动花费的时间太长,因此我考虑在后台线程上执行此操作。但我读到您不能在线程之间传递对象。解析器输出NSArray,有没有办法做到这一点?我还读到您不应该从后台线程更改UI,但是此数组将加载表 View 。

最佳答案

NSObject类具有几个不同的实例方法,使您可以在主UI线程上调用方法。例如,performSelectorOnMainThread:withObject:waitUntilDone:方法允许您使用所选对象在主线程上调用接收器的方法。

以下是一些入门代码:

-(void) dataDoneLoading:(id) obj {
    NSMutableArray *array = (NSMutableArray *) obj;
    // update your UI
    NSLog(@"done");
}

-(void) myThread:(id) obj {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSMutableArray *array = [[[NSMutableArray alloc]init ]autorelease];

    // build up your array

    [self performSelectorOnMainThread:@selector(dataDoneLoading:) withObject:array waitUntilDone:NO];

    [pool release];    
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [NSThread detachNewThreadSelector:@selector(myThread:) toTarget:self withObject:nil];    
}

关于iphone - 我可以使用后台线程解析数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6965265/

相关文章:

javascript - 检测文件是否应该从 UIWebview 下载

objective-c - 误删除后找不到self.tableview

objective-c - 什么可能导致无法在一台计算机上启动 OS X 应用程序的两个副本?

java - Android中的观察者模式与数据同步

c# - 延迟排队的后台工作项

iphone - 一周后根据第一个字段中输入的日期自动显示第二个字段中的日期

iphone - 获取 Github 存储库更新的工作流程

java - System.err.println 在 Java 线程压力下失败

html - 固定背景图像在 iPhone/iPad 上消失

objective-c - 自定义窗口标题 + 工具栏(例如 Mac App Store 和 Reeder for Mac)