每次我通过NSURLSession / Connection向我的网络服务器发出请求都会泄漏!说实话,它并不多,但如果你要做几百或几千个电话,那就太讨厌了。
我已经有一个星期了。我尝试了一切。没有缓存,小缓存,在调用完成后将所有内容设置为nil(这是不必要的),使用数据任务进行会话或仅使用请求连接。每次我分配更多的内存,我没有找到解决这个问题的方法。
所以我设置了一个小testApp:
#import "ViewController.h"
@interface ViewController ()
@property NSString *param;
@property NSURL * url;
@property NSURLConnection *test;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.param = [NSString stringWithFormat:@"hi"];
self.url = [[NSURL alloc]initWithString:@"http://127.0.0.1/xmlfile.php"];
for (int i = 0; i<20000; i++){
[self connect:self.param url:self.url];
}
NSLog(@"I AM DONE!");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSData *)connect:(NSString*)param url:(NSURL*)url{
self.test = [[NSURLConnection alloc]initWithRequest:nil delegate:self];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
return nil;
}
@end
我很想添加内存使用的图像,但我太新了。 所以就这样: 5K:迭代 http://i59.tinypic.com/123tts2.png 20K: http://i59.tinypic.com/1zzqsrk.png
我听说这可能是ios8的一个问题。
请帮忙!
我对所有事情都持开放态度,如果有人能证明我错了并告诉我正确的方法,我会感到高兴。非常感谢
答案 0 :(得分:0)
您实际上从未将您的网址转换为请求并将其提交给NSURLConnection
。因此,连接将永远不会完成,并且其内存将保持分配状态。如果您将此代码添加到connect:url:
方法中,您将发现上述代码与众不同:
NSURLRequest* request = [[NSURLRequest alloc] initWithURL:url];
...并将其传递到您的NSURLConnection
,以便实际执行某些操作:
self.test = [[NSURLConnection alloc]initWithRequest:request delegate:self];
...因为那时,一旦连接完成其工作 - 成功或其他 - 它的内存将被释放。