我在寫一個NSURL
的擴展,它會給它一個方便的方法URLFromString:withArguments:
,它可以構建一個包含一些參數的URL。此方法的第一個參數是一個字符串,如@"http://www.example.com/foo"
,第二個是NSDictionary,如{key1 => val1, key2 => val2}
,其中所有的鍵和值都是NSStrings。便利的方法將返回一個NSURL與URL一樣,在這個例子中在Cocoa中對URL參數進行編碼
http://www.example.com/foo?key1=val1&key2=val2
首先,我想我應該詢問是否有已經存在於基金會這樣的事情!如果沒有,但是,我的問題是正確編碼鍵和值。關於這個問題已經寫了很多(1,2,3)。這三種方法解決問題的方法分別是:
不雅。 (雖然它可能有效,但我還沒有嘗試過。)
沒有正確地逃避一切。
源代碼建議在NSString上使用
- stringByAddingPercentEscapesUsingEncoding
來逃避一切。問題是這個方法實際上並沒有逃脫它應該的一切,&符和斜槓就是兩個明顯的例子。我不知道這種方法何時會有用,因爲這些遺漏,但它對我的應用程序肯定沒有用處。顯然不是與ARC的猶太教。
我對ARC還不是很瞭解,但本網站上提供的解決方案使用了ARC緩存的一些CoreFoundation類型。 Xcode提供在幾個類型轉換之前插入
__bridge
,並且代碼似乎可以工作,但我不知道我是否在泄漏內存或通常做正確的事情。總的來說,在我看來,我不應該這麼低級。
所以再次,我的問題是:有沒有辦法做內置到NSURL或NSString或類似的HTTP請求所需的百分比編碼?如果不是,最安全的方法是什麼?
謝謝。與此同時,我在同一主題上找到了[這個SO問題](http://stackoverflow.com/questions/6822473/correct-bridging-for-arc)。所以如果我拿ARC代碼的例子,並刪除第一個'__autoreleasing'我會好嗎? – bdesham 2011-12-20 15:41:13
是的(以及一些隨機文本以符合最小注釋長度:-)) – CRD 2011-12-20 16:32:02