NSURLConnection を使用してフォーム データを非同期に POST しています。計測器を使用すると、接続の開始時にメモリ使用量が増加することがわかりますが、接続が完了すると、メモリ使用量は以前のベースラインを超えるレベルまで低下します。これを「リーク」と呼んでいます。これは、接続の開始/終了から約 60 秒後にメモリが解放され、グラフが元のベースラインに戻るためです。
なぜこの記憶が今回だけ保持されているのですか?どうすればすぐに解放できますか?
- (id)initWithPostURL:(NSURL *)url content:(NSData *)content completionBlock:(void (^)(NSData *data))completionBlock boundary:(NSString *)boundary;
{
self = [super init];
if (self) {
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30.0f];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-type"];
[urlRequest setValue:[NSString stringWithFormat:@"%d", content.length] forHTTPHeaderField:@"Content-length"];
[urlRequest setHTTPBody:content];
_urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:NO];
[_urlConnection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
[_urlConnection start];
_data = [NSMutableData data];
_dataSemaphore = NULL;
_completionBlock = completionBlock;
}
return self;
}