簡體   English   中英

iPhone SDK后台線程調用其他方法

[英]iPhone SDK Background threads calling other methods

我是一個看似簡單的問題,似乎無法找到答案(這阻礙了我的應用程序)。

我有一個運行特定方法的后台線程:

-(void)processImage:(UIImage *)image {

  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

  //Process image here in the background here

  [pool drain];
}

這很好用,但是當我想從已經后台的方法中調用另一個方法時,我的問題就來了。 此通話是否保留在后台? 我是否需要添加NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; [pool drain]; 使新方法也可以在后台運行?

任何建議都將非常有幫助。 我對此有些困惑。

非常感謝,布雷特

它會留在后台,與它被調用的線程相同。

需要考慮的一些線程注意事項:

  • 可能並不明顯,但是如果您從后台線程調用計時器,並且該線程在應該關閉計時器之前退出,則不會調用該計時器。 因此,建議您從主線程設置計時器
  • 除非生成另一個線程,否則不需要另一個自動釋放池。
  • 任何UI更新都應在主線程上完成

您不需要添加另一個自動釋放池,您已經擁有的就足夠了。 是的,您從該線程發起的所有調用都保留在該線程中,因此也“在后台”運行。 例外是使用“ performSelectorOnMainThread:”,這當然會使給定的選擇器在主線程上執行:-)如果要調用GUI方法(例如在UIImageView上設置圖像),則應確保執行所以在主線程上。 請參閱有關“ performSelectorOnMainThread:waitUntilDone:”的文檔(很抱歉,沒有給您提供鏈接,請在我的iPad上輸入此鏈接)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM