我在我的iPad应用程序中生成一个从Web服务(SOAP)查找数据的线程。使用NSDictionary成员对象将响应解析为NSArray。如果我调用我的服务并同步解析,它会按预期工作。现在我必须启动后台线程,当查找线程释放其池并且我的主线程的UITableView尝试显示数据(调用reloadData)时,我从主线程中获取中止。
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
^------------- Thread 1: Program received signal: EXC_BAD_ACCESS
[pool release];
return retVal;
}
我的猜测是解析后的结果已被池耗尽释放。我是否必须从一个区域复制到另一个区域?这是一个庞大的结构,深层复制将是昂贵的。
我还应该如何获得后台线程,以便在主线程中为我的UITableView安全地构建数据源?
答案 0 :(得分:1)
您应该将对象保留在后台线程上,然后在完成使用后在主线程上将其释放。
答案 1 :(得分:0)
您可能需要在线程耗尽其池之前调用[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]
以将结果传递回主线程。根据您的应用的结构,NSObject
可能是您的viewController
,selector
将成为viewController
上的某种方法。