次のようなメモリリーク信号が発生します
どうすればこれをクリアできますか、助けてください。
これを試して...
NSString *newString = nil;
CFStringRef stringRef = CFURLCreateStringByAddingPercentEscapes(...);
newString = (NSString *)stringRef;
CFRelease(stringRef);
if(newString)
return newString;
使用する
return [newString autorelease];
NSString
オブジェクト はnewString
関数に割り当てられますCFURLCreateStringByAddingPercentEscapes
。
したがって、オブジェクトはこの時点で1の保持カウントを達成しています。したがって、保持されたオブジェクトを再調整すると、メモリリーク信号が発生します。オブジェクトnewString
を自動解放プールに追加して、OSが適切なタイミングで解放するメモリを処理するようにすることができます。
お役に立てれば。
(__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;
}