0

次のようなメモリリーク信号が発生しますここに画像の説明を入力してください

どうすればこれをクリアできますか、助けてください。

4

3 に答える 3

0

これを試して...

 NSString *newString = nil;
 CFStringRef stringRef = CFURLCreateStringByAddingPercentEscapes(...);
 newString = (NSString *)stringRef;
 CFRelease(stringRef);

 if(newString)
      return newString;
于 2012-11-28T06:08:18.743 に答える
0

使用する

return [newString autorelease];

NSStringオブジェクト はnewString関数に割り当てられますCFURLCreateStringByAddingPercentEscapes

したがって、オブジェクトはこの時点で1の保持カウントを達成しています。したがって、保持されたオブジェクトを再調整すると、メモリリーク信号が発生します。オブジェクトnewStringを自動解放プールに追加して、OSが適切なタイミングで解放するメモリを処理するようにすることができます。

お役に立てれば。

于 2012-11-28T06:10:47.107 に答える
0

(__bridge_transfer NSString *)の代わりに使用(__bridge NSString *)

ARC__bridge_transferを使用すると、返された文字列のメモリ管理をARCに転送するために使用できます。

例:

NSString *myString = [self encodeURL:@"hi*)"];
NSLog(@"%@",myString);

-(NSString *)encodeURL:(NSString *)string{

    NSString *newString = @"";        
    newString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, CFSTR("^%*)*&%$"),CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));              
    return newString;

}
于 2012-11-28T06:33:40.963 に答える