Nous avons intégré facebook dans une application pour télécharger des photos. Cela a fonctionné très bien mais récemment en utilisant l'outil XCode Alloc pour repérer les fuites de mémoire, nous avons découvert ce qui semble être un terrible. Nous exécutons un processus de téléchargement dans un fil d'expédition distinct. Ensuite, nous chargeons notre méthode de téléchargement facebook dans un pool de publication automatique. Lorsque le téléchargement est appelé, l'image continue jusqu'au profil FB approprié. Mais, lors du téléchargement d'un NSKeyValueMethodForPattern est créé et détient environ 500 Ko. Ensuite, le grand, - [NSConcreteMutableData appendBytes: length] est créé et consomme environ 4,5 Mo en fonction de la taille de l'image. Ces deux sont créés pour chaque image téléchargée et JAMAIS DIFFUSÉ! Je suis perdu avec ça. Les points d'outils alloc au-dessous comme le coupableHorrible Facebook fuite de mémoire d'intégration 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;
}
Voici le code que nous utilisons pour créer le fil et la piscine « release » pour traiter et télécharger l'image.
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];
});
Y at-il autre chose que je peux faire pour libérer ces porcs? Je ne suis pas un novice dans ce domaine, mais je ne sais pas ce que c'est. Toute aide ici serait fantastique!
Merci! - Jim
Quand avez-vous effectué la dernière mise à jour de votre code FBConnect? Regardez cette méthode sur github, ligne 167: https://github.com/facebook/facebook-ios-sdk/blob/master/src/Facebook.m – danh
Je viens de mettre à jour le code hier soir, et avait toutes sortes de récursion problèmes, venez découvrir que j'ai mis à jour directement dans un bug de récursivité. Je l'ai depuis mis à jour après avoir perdu 5 heures de ma vie. Toujours avoir le même problème. – mejim707