Objective c 使用NSURLConnection时增加内存
我正在尝试使用NSURLConnection向服务器发出连续的post请求。 但我注意到,我的记忆在不断增加,甚至在我停止连续发送垃圾邮件之后,记忆也不会下降。 一段时间后,应用程序将崩溃 谁能告诉我我做错了什么,以及我如何解决这个问题? 我在这里使用弧 提前谢谢Objective c 使用NSURLConnection时增加内存,objective-c,Objective C,我正在尝试使用NSURLConnection向服务器发出连续的post请求。 但我注意到,我的记忆在不断增加,甚至在我停止连续发送垃圾邮件之后,记忆也不会下降。 一段时间后,应用程序将崩溃 谁能告诉我我做错了什么,以及我如何解决这个问题? 我在这里使用弧 提前谢谢 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(continuousCall) userInfo:nil repeats:YES];
}
-(void) continuousCall {
NSString * json = @"{\"a\":{\"a1\":{\"3\":{\"value1\":0,\"value2\":255,\"value3\":72},\"1\":{\"value1\":255,\"value2\":234,\"value3\":0},\"2\":{\"value1\":0,\"value2\":255,\"value3\":72},\"0\":{\"value1\":0,\"value2\":255,\"value3\":72}},\"a2\":{\"7\":{\"value1\":0,\"value2\":255,\"value3\":72},\"3\":{\"value1\":0,\"value2\":255,\"value3\":72},\"8\":{\"value1\":0,\"value2\":255,\"value3\":72},\"4\":{\"value1\":255,\"value2\":234,\"value3\":0},\"0\":{\"value1\":0,\"value2\":255,\"value3\":72},\"5\":{\"value1\":255,\"value2\":234,\"value3\":0},\"1\":{\"value1\":0,\"value2\":255,\"value3\":72},\"6\":{\"value1\":0,\"value2\":255,\"value3\":72},\"2\":{\"value1\":0,\"value2\":255,\"value3\":72}},\"a3\":{},\"a4\":{\"3\":{\"value1\":0,\"value2\":255,\"value3\":72},\"1\":{\"value1\":0,\"value2\":255,\"value3\":72},\"2\":{\"value1\":255,\"value2\":234,\"value3\":0},\"0\":{\"value1\":0,\"value2\":255,\"value3\":72}}}}";
[self connectWith:json];
json = nil;
}
-(void) connectWith: (NSString*) json {
[[NSURLCache sharedURLCache] removeAllCachedResponses];
// Do any additional setup after loading the view, typically from a nib.
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:url] cachePolicy: NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:0];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[json dataUsingEncoding:NSUTF8StringEncoding]];
// [request addValue:nil forHTTPHeaderField: @"Content-Type"];
//#1
// NSURLConnection * urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
//#2
NSURLConnection * urlConnection = [NSURLConnection connectionWithRequest:request delegate:self];
[urlConnection start];
//#3
// NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// NSLog(@"%@", response.description);
// [[NSURLCache sharedURLCache] removeAllCachedResponses];
// }];
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection {
connection = nil;
// connection
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
我发现了问题,它与NSURLConnection无关,我认为这是造成问题的原因。
我正在使用JSONKit库,出于某种原因,CFString的内存一直在堆积。我使用的是NSJSONSerialization。如果您正在执行一些创建大量临时对象的操作,您可能希望创建一个新池,如下所示:
-(void) continuousCall {
id myPool = [NSAutoreleasePool new];
NSString * json = @"{\"a\":{\"a1\":{\"3\":{\"value1\":0,\"value2\":255,\"value3\":72},\"1\":{\"value1\":255,\"value2\":234,\"value3\":0},\"2\":{\"value1\":0,\"value2\":255,\"value3\":72},\"0\":{\"value1\":0,\"value2\":255,\"value3\":72}},\"a2\":{\"7\":{\"value1\":0,\"value2\":255,\"value3\":72},\"3\":{\"value1\":0,\"value2\":255,\"value3\":72},\"8\":{\"value1\":0,\"value2\":255,\"value3\":72},\"4\":{\"value1\":255,\"value2\":234,\"value3\":0},\"0\":{\"value1\":0,\"value2\":255,\"value3\":72},\"5\":{\"value1\":255,\"value2\":234,\"value3\":0},\"1\":{\"value1\":0,\"value2\":255,\"value3\":72},\"6\":{\"value1\":0,\"value2\":255,\"value3\":72},\"2\":{\"value1\":0,\"value2\":255,\"value3\":72}},\"a3\":{},\"a4\":{\"3\":{\"value1\":0,\"value2\":255,\"value3\":72},\"1\":{\"value1\":0,\"value2\":255,\"value3\":72},\"2\":{\"value1\":255,\"value2\":234,\"value3\":0},\"0\":{\"value1\":0,\"value2\":255,\"value3\":72}}}}";
[self connectWith:json];
json = nil;
// drain the new pool
[myPool drain];
}