1

ARC を使用して iOS 5 アプリで文字列を URL エンコードしようとしています。

これは私がそれを行う方法です:

- (NSString *)escape:(NSString *)text
{
    return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                          (__bridge CFStringRef)text, NULL,
                                          (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                          kCFStringEncodingUTF8);
}

次に、次のようなテスト データで呼び出します。

NSLog([self escape:@"kalel///&&&???"]);

しかし、私が得た出力NSLogは次のとおりです。

kalel0.0000000.0000000.00000022623F0.0000000.000000

それは正しくないように思えますが、何があっても正しく理解できません

4

1 に答える 1

2

あなたのescape機能は問題ありません。問題は、あなたが呼び出す方法にありますNSLog:

escape入力の文字列kalel%2F%2F%2F%26%26%26%3F%3F%3Fを生成します。この文字列をフォーマット文字列として解釈し、単語NSLogの直後にゴミを浮動小数点数として出力します!kalel

NSLog常に最初の引数として文字列定数を使用して呼び出す必要があります。たとえば、次のようになります。

NSLog(@"%@", [self escape:@"kalel///&&&???"]);

PSメモリリークがありescapeます---return (__bridge_transfer NSString *)保持されたCFオブジェクトをObjective Cスペースに転送する必要があります。

于 2012-01-10T20:00:47.853 に答える