2011-09-19 34 views
2

我正在使用iOS SDK 5開發應用程序,我試圖使用ARC。但我需要使用ASIHTTPRequest,它不支持ARC。蘋果的文檔表示可以使用ARC文件。所以我編譯所有ASIHTTPRequest文件與-fno-objc-arc。我在我的課程中使用ARC編寫了以下代碼:帶ASIHTTPRequest的ARC

NSURL *url = [[NSURL alloc] initWithString:urlStr]; 
ASIHTTPRequest *req = [[ASIHTTPRequest alloc] initWithURL:url]; 
req.delegate = self; 
[req startAsynchronous]; 

但在執行第一行後,url爲零。什麼是錯誤的或如何在ARC項目中使用手動託管的代碼?謝謝。

+0

iOS5仍然被NDA所覆蓋,所以知道它的人不能在不違反與Apple的協議的情況下回答問題。話雖如此,我認爲這與ARC或iOS5沒有任何關係。 –

回答

4

您是否已經轉義了URL字符串中的所有非ASCII字符?否則,NSURL實例不會被創建,因爲它不知道如何處理URL字符串中的非ASCII字符。你需要做一些事情,像這樣:

NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

而且,而是創建自己的NSURL實例的,爲什麼不使用蘋果的helper方法URLWithString:,這將給你像這樣的「自動釋放」 NSURL實例:

NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
ASIHTTPRequest *req = [[ASIHTTPRequest alloc] initWithURL:url]; 
req.delegate = self; 
[req startAsynchronous]; 
+0

是的,我忘了逃跑。謝謝。 –

+0

如果使用ARC,使用alloc/init比使用自動釋放方法更節省時間和空間。差異通常不是很大,但有時每一點都有幫助。 –