我是Objective-C的新手.XCode突出显示以下代码作为问题.
_myCookies是我班级的私有变量,我存储收到的cookie.
@implementation MessageSender {
NSArray *_myCookies;
}
...
// Socket open callback
- (void) gotData:(MySocket *) socket {
NSDictionary *responseHeaders = (__bridge NSDictionary*)CFHTTPMessageCopyAllHeaderFields(socket.HTTPHeaders);
_myCookies = [NSHTTPCookie cookiesWithResponseHeaderFields:responseHeaders
forURL:[NSURL URLWithString:@""]];
}
Run Code Online (Sandbox Code Playgroud)

突出的问题是:
我该如何解决这个问题?我正在使用ARC.我想将cookie存储在我的类中,以便稍后在发送请求时使用它们,但是我想让套接字处理它的responseHeaders.
您需要将CoreFoundation对象的所有权转移到ARC:
NSDictionary *responseHeaders = CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(socket.HTTPHeaders));
Run Code Online (Sandbox Code Playgroud)
CF对象不由ARC管理,必须手动释放.当您使用__bridge强制转换时,您只需直接投射对象而不会更改所有权.这是导致内存泄漏的原因(您需要CFRelease在完成CF对象时手动释放它们).
只需使用CFBridgingRelease转换对象就可以避免所有这些手动内存管理问题(如上面的代码示例所示).这会将CF对象的所有权转移给ARC,因此ARC会自动为您释放该对象,一切都会正常工作,您无需额外的工作.
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |