kit*_*oop 5 memory-leaks instruments ios twrequest social-framework
使用TWRequest时,Instruments(Leaks)报告内存泄漏,我无法真正看到我做错了什么.
以下是重现问题的步骤:
创建一个新的Xcode项目(禁用ARC),添加Twitter框架,然后将以下行添加到代码中(例如在viewDidLoad中):
TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET];
[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSLog(@"in performrequest");
[postRequest release];
}];
Run Code Online (Sandbox Code Playgroud)
在使用Instruments(Leaks)分析此代码之后,它告诉我带有"performRequestWithHandler"的行正在泄漏:


有什么想法可以防止这种泄漏?
我不确定为什么仪器将其视为泄漏,但您可以在完成块之外释放请求。一旦发起请求,它就会被连接保留,直到执行完成块为止。将您的代码更改为:
TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET];
[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSLog(@"in performrequest");
}];
[postRequest release];
Run Code Online (Sandbox Code Playgroud)
如果这也消除了泄漏,我不会感到惊讶。