Wir haben Facebook in eine Anwendung integriert, um Fotos hochzuladen. Das funktioniert gut, aber seit kurzem nutzen wir das XCode-Alloc-Tool, um alle Speicherlecks aufzuspüren, die wir entdeckt haben und die scheinbar schrecklich sind. Wir führen einen Upload-Prozess in einem separaten Versandthread aus. Dann laden wir unsere Facebook-Upload-Methode in einen Auto Release-Pool. Wenn der Upload aufgerufen wird, geht das Image auf das entsprechende FB-Profil über. Aber beim Hochladen wird ein NSKeyValueMethodForPattern erzeugt und hält ca. 500KB. Dann wird die große, - [NSConcreteMutableData appendBytes: length] get erstellt und verbraucht etwa 4,5MB, abhängig von der Bildgröße. Diese beiden werden für jedes hochgeladene Bild erstellt und NIEMALS VERÖFFENTLICHT! Damit bin ich ratlos. Die alloc-Tool zeigt auf die unten als der Schuldige istHorrible Facebook IOS Integration Speicherleck
- (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;
}
Hier ist der Code verwenden wir den Faden und „Freigabe“ Pool zu erstellen, das Bild zu verarbeiten und zu laden.
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];
});
Gibt es noch etwas, was ich tun kann, um diese Memos freizugeben? Ich bin kein Neuling in diesem Zeug, aber ich bin damit ratlos. Jede Hilfe hier wäre fantastisch!
Vielen Dank! - Jim
Wann haben Sie Ihren FBConnect-Code zuletzt aktualisiert? Sehen Sie sich diese Methode auf GitHub an, Zeile 167: https://github.com/facebook/facebook-ios-sdk/blob/master/src/Facebook.m – danh
Ich habe gerade den Code letzte Nacht aktualisiert und hatte alle Arten von Rekursion Probleme, kommen, um herauszufinden, dass ich direkt in einen Rekursion Bug aktualisiert. Ich habe seitdem wieder aktualisiert, nachdem ich 5 Stunden meines Lebens verloren habe. Immer noch das gleiche Problem. – mejim707