0

プロジェクトをARCに変換していますが、Xcodeはここにメモリリークがあると考えていますが、誰かがこれに何か問題があると思いますか?私はこのコードを書かなかったので、C呼び出しに精通していません。

- (NSString*) URLEscaped
{

    NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                                NULL,
                                (CFStringRef)self,
                                NULL,
                                (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                kCFStringEncodingUTF8);

    return encodedString;

}
4

2 に答える 2

4

ARCでは、__ bridge_transferを使用して、返された文字列のメモリ管理をARCに転送できます。

NSString *encodedString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
                            NULL,
                            (CFStringRef)self,
                            NULL,
                            (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                            kCFStringEncodingUTF8);
于 2012-08-10T19:15:14.547 に答える
1

ドキュメントから:

CoreFoundationを使用してオブジェクトへの参照を取得する方法はたくさんあります。Core Foundationの所有権ポリシーに沿って、関数によって返されるオブジェクトを所有しているかどうかを知る必要があります。これにより、メモリ管理に関して実行するアクションを知ることができます。Core Foundationは、関数によって返されるオブジェクトを所有しているかどうかを判断できるように、関数の命名規則を確立しています。簡単に言うと、関数名に「作成」または「コピー」という単語が含まれている場合は、オブジェクトを所有していることになります。関数名に「Get」という単語が含まれている場合、そのオブジェクトを所有していません。

はい、あなたはCFStringそこに漏れています。

于 2012-05-11T09:00:21.367 に答える