objective-c - 潜在的内存泄漏编码 url

标签 objective-c ios

为什么我在使用 XCode 进行分析时会发生内存泄漏?

NSString *email = [defaults objectForKey:@"email"];
NSString *encodeEmail = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)email, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));


NSString *urlp1=@"/xyz/xx/";
NSString *fullUrl=[urlp1 stringByAppendingString: [NSString stringWithFormat:@"%@/following", encodeEmail]];

最佳答案

来自 transitioning to ARC release notes

__bridge transfers a pointer between Objective-C and Core Foundation with no transfer of ownership.

这意味着 encodeEmail 没有分配内存的所有权,因此它不会被 ARC 释放。

我认为你应该使用__bridge_transfer

__bridge_transfer or CFBridgingRelease moves a non-Objective-C pointer to Objective-C and also transfers ownership to ARC. ARC is responsible for relinquishing ownership of the object.

NSString *encodeEmail = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)email, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));

关于objective-c - 潜在的内存泄漏编码 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13487484/

相关文章:

ios - 使用 objective-c 更改所选 UITabBarItem 的字体

ios - AFNetworing - setImageWithURLRequest 不工作

iOS创建滑动返回

ios - 使用 AVPlayer 获取 AirPlay 设备的名称

objective-c - 使 AVAudioPCMBuffer 工作(AVAudioFile.mm 错误代码 -50)

ios,从 View 中获取指向 Controller 的指针

objective-c - OSX - 即使设置了 JSON 序列化器,AFNetworking 也发送文本

objective-c - 仅使用 NSBundle 插入 Xib 的两个按钮。仍然显示TableView

ios - 为什么指针无法取回新值? iOS

ios - 如何使用 KVC 访问器来访问可变数组 Objective-C