私たちは写真をアップロードするアプリケーションにFacebookを統合しました。これは素晴らしい動作をしていますが、最近XCode Allocツールを使用してメモリリークを追跡し、ひどいと思われるものを発見しました。アップロード処理は別のディスパッチスレッドで実行しています。それから、Facebookのアップロードメソッドを自動リリースプールに読み込んでいます。アップロードが呼び出されると、イメージは適切なFBプロファイルに移動します。しかし、NSKeyValueMethodForPatternのアップロードは作成され、約500KBを保持します。次に、大きいもの、 - [NSConcreteMutableData appendBytes:length] getが作成され、イメージサイズに応じて約4.5MBを消費します。これらの2つはアップロードされた画像ごとに作成され、決して解放されません!私はこれで迷っている。犯人ここ恐ろしいFacebook IOS統合メモリリーク
- (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];
});
私はこれらのmem hogsを解放するために他に何かできますか?私はこのものの初心者ではありませんが、私はこれで迷っています。ここのどんな助けも素晴らしいだろう!
ありがとうございました! - Jim
いつFBConnectコードを最後に更新しましたか?その方法をgithubの167行目で見てください:https://github.com/facebook/facebook-ios-sdk/blob/master/src/Facebook.m – danh
私は昨晩コードを更新し、すべての並べ替えをしました問題は、私が再帰のバグに更新されたことを知るために来てください。私はそれ以来、私の人生の5時間を失った後に更新しました。それでも同じ問題があります。 – mejim707