2011-11-15 52 views
0

我正在產生一個線程來查找我的iPad應用程序中的Web服務(SOAP)的數據。響應被解析成帶有NSDictionary成員對象的NSArray。如果我同時調用我的服務和解析,它將按預期工作。現在我必須啓動一個後臺線程,當lookup-thread釋放它的池並且我的主線程的UITableView試圖顯示數據(reloadData被調用)時,我會從主線程中退出。iOS:我是否必須將查找線程的NSAutoreleasePool的結果複製到主線程?

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構建數據源?

回答

1

您應該將該對象保留在後臺線程上,然後在完成使用後將其釋放到主線程中。

0

您可能需要在線程耗盡其池以將結果傳遞迴主線程之前調用[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]。根據您的應用的結構,NSObject可能是您的viewController,您的selector將是您的viewController上的某種方法。

+0

我已經從線程回調到發出線程請求的對象。我的問題是將解析的對象從後臺線程中取出並且由主應用程序穩定(即保留)---或者......我是否必須從一個池複製到另一個池? – mobibob

相關問題