我收到了一个内存泄漏信号,如图所示
我该如何清除这个,请帮助我。
利用
return [newString autorelease];
该NSString
对象 newString
在函数中分配CFURLCreateStringByAddingPercentEscapes
。
因此,此时对象的保留计数为 1。因此,当您重新调整保留对象时,您会收到内存泄漏信号。我们可以将对象添加newString
到自动释放池中,以便操作系统负责在正确的时间释放内存。
希望这可以帮助。
尝试这个...
NSString *newString = nil;
CFStringRef stringRef = CFURLCreateStringByAddingPercentEscapes(...);
newString = (NSString *)stringRef;
CFRelease(stringRef);
if(newString)
return newString;
使用(__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;
}