2012-11-21 32 views
1

由於ASIHTTPRequests不保留委託,因此可能會遇到委託在請求完成前被釋放的情況。使用ASIHTTPRequest時保留並釋放委託

您可以處理這種情況:

[request clearDelegatesAndCancel]; 
[request release]; 

但有時你想請求的完成,而你不想取消。這是獲得最佳效果的方式嗎?

//Retain delegate  

[request delegate:[self retain]]; 

-(void): requestFinished: (ASIHTTPRequest *) request{ 
    [self release]; 
    ... 
} 

-(void): requestFailed: (ASIHTTPRequest *) request{ 
    [self release]; 
    ... 
} 
+2

如果你需要這個,你應該考慮重新設計你的代碼邏輯。 – 2012-11-21 21:37:59

回答

0

使用單例類來處理所有這些請求。

我總是使用以下架構來分組請求。 (1)如果這些請求被用來顯示視圖控制器的內容,當視圖控制器消失時它們將被掛起,當視圖控制器出現時它們將被恢復,並且當視圖控制器被釋放時它將被取消。 (2)如果這些請求被用於向服務器發送信息,並且即使當視圖控制器被釋放時(例如上傳照片)也需要在那裏),單個類將被用於管理所有這些請求。 而且我們還可以設置一個屏幕來查看由這個單例管理的所有後端正在進行的請求。