我在写一个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