【发布时间】:2010-12-03 15:03:34
【问题描述】:
我正在尝试通过在后台线程中执行计算来提高我的应用程序性能,但我在执行此操作时遇到了麻烦。原来我一直在用
[self performSelectorInBackground:@selector(calculateValue:) withObject:[words objectAtIndex:row]];
当我的选择器是一个 void 方法时,这很好。但是,我正在尝试做类似但显然以下代码无效的事情。
int value = [self performSelectorInBackground:@selector(calculateValue:) withObject:[words objectAtIndex:row]];
非常感谢任何帮助。
更新
这是我目前要走的路线。我不知道如何回调主线程以将更新后的值从 computeWordValue 发送到我的 cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
int value = [self performSelectorInBackground:@selector(calculateWordValue:) withObject:[wordsSection objectAtIndex:row]];
NSString *pointValue = [[NSString alloc] initWithFormat:@"Point:%d",value];
cell.pointLabel.text = pointValue;
}
-(void)calculateWordValue:(NSString *)word {
[self performSelectorOnMainThread:@selector(computeWordValue:) withObject:word waitUntilDone:YES];
}
-(int)computeWordValue:(NSString *)word {
return totalValue; //This will be a randomly generated number
}
【问题讨论】:
-
calculateWordValue的速度有多快/慢,你为什么要尝试在后台运行它? -
它执行了很多计算,我只是为了发布而简化了它
标签: iphone objective-c multithreading