写真をアップロードするアプリケーションに facebook を統合しました。これはうまく機能していますが、最近 XCode Alloc ツールを使用してメモリ リークを追跡し、ひどいものと思われるメモリ リークを発見しました。別のディスパッチ スレッドでアップロード プロセスを実行しています。次に、facebook のアップロード メソッドを自動リリース プールに読み込みます。アップロードが呼び出されると、画像は適切な FB プロファイルに送られます。ただし、アップロード中に NSKeyValueMethodForPattern が作成され、約 500KB を保持します。次に、大きな -[NSConcreteMutableData appendBytes:length] get が作成され、画像サイズに応じて約 4.5MB を消費します。これらの 2 つは、アップロードされた画像ごとに作成され、リリースされることはありません。私はこれで途方に暮れています。割り当てツールは、原因として以下を指しています
- (FBRequest*)openUrl:(NSString *)url params:(NSMutableDictionary *)params
httpMethod:(NSString *)httpMethod delegate:(id<FBRequestDelegate>)delegate
{
[params setValue:@"json" forKey:@"format"];
[params setValue:kSDK forKey:@"sdk"];
[params setValue:kSDKVersion forKey:@"sdk_version"];
if ([self isSessionValid]) {
[params setValue:self.accessToken forKey:@"access_token"];
}
[_request release];
_request = [[FBRequest getRequestWithParams:params
httpMethod:httpMethod
delegate:delegate
requestURL:url] retain];
[_request connect]; // <<<< SAYING THIS IS 100% cause
return _request;
}
画像を処理してアップロードするためのスレッドと「リリース」プールを作成するために使用しているコードを次に示します。
backgroundQueue = dispatch_queue_create("com.somecomp.appnameo.bgqueue", NULL);
dispatch_async(backgroundQueue, ^(void) {
NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];
NSData *imageNSData = [NSData dataWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", docDir, self.fileName]];
UIImage *img = [[UIImage alloc] initWithData:imageNSData];
fbResponse = 0;
//[facebook requestWithGraphPath:@"me" andDelegate:self];
[[delegate facebook] requestWithGraphPath:@"me/permissions" andDelegate:self];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
//@"Sent From Some APP!", @"name",
self.postTitle, @"caption",
// string, @"description",
img, @"picture",
//@"my photo's caption text here.", @"message",
nil];
[img release];
[[delegate facebook] requestWithMethodName:@"photos.upload"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
[loopPool drain];
});
これらのメモリ豚を解放するために他にできることはありますか? 私はこのことの初心者ではありませんが、これで途方に暮れています。ここでの助けは素晴らしいでしょう!
ありがとうございました!- ジム