UIImageJPEGRepresentation
J'ai des problèmes à trouver une fuite de mémoire qui a ensuite à nouveau les causes de mon Appli crash. Il semble que la mémoire allouée pour le JPEGRepresentation ne pas sortir. Ce qui est encore plus curieux, car le NSData Objet créé par UIImageJPEGRepresentation est seulement d'environ 300 ko gros (dependend sur l'image), mais l'utilisation de la mémoire de sauter par 3 à 5 mo par image à ce stade.
C'est le code
QueuedObject* queuedObject = [[QueuedObject alloc] init];
[queuedObject setUrl:url];
QueuedObjectData* jsonQueuedData = [[QueuedObjectData alloc] init];
[jsonQueuedData setData:jsonData];
[jsonQueuedData setFilename:@"message.json"];
[jsonQueuedData setContentType:@"application/json"];
[jsonQueuedData setKeyValue:@"JSONMessage"];
[queuedObject addData:jsonQueuedData];
int i=1;
QueuedObjectData* imageData = [[QueuedObjectData alloc] init];
for(id file in files)
{
if(file!=nil)
{
[imageData setData:UIImageJPEGRepresentation(file, 0.8)];
[imageData setFilename:[NSString stringWithFormat:@"image%d.jpg",i]];
[imageData setContentType:@"image/jpeg"];
[imageData setKeyValue:@"image"];
[queuedObject addData:imageData];
i++;
}
}
[[UploadQueue sharedInstance] addObject:queuedObject];
[jsonQueuedData release];
[jsonData release];
[url release];
[imageData release];
[queuedObject release];
Peut-être que vous avez une idée pour m'aider à
cordialement
Manuel
OriginalL'auteur Manuel | 2012-01-11
Vous devez vous connecter pour publier un commentaire.
Vous êtes maintenant en utilisant seulement un
imageData
objet dans votre cycle. Donc, vous pouvez toujours créer représentation JPEG sans les supprimer. Essayez ce code:Ici, vous créez un objet, l'utiliser et puis supprimer.
Mais cette approche de mal? Avez-vous des problèmes avec ce code?
Désolé pour la confusion. Le code semble correct, mais dans des Instruments (Activité - Utilisation de la Mémoire), je vois encore beaucoup, beaucoup de Mémoire étant utilisé par l'Application. Est il possible que je peux trouver où la mémoire est de leur utilisation? Si je regarde dans les Instruments de l'outil de Répartition il n'y a rien, même à proximité de la quantité étant utilisé ici ;/ (je parle de+ de 10 méga-octets pour l'ajout de 3 photos (qui ne sont que d'environ 300 ko!) pour ma queuedObject objet)
Les Dotations de l'instrument masquer l'utilisation de la mémoire que la Mémoire de Surveiller et d'autres exposent. Les Images sont de 300 ko lors de la compression peut être beaucoup plus grande dans la mémoire, parce qu'ils sont utilisés dans leur non compressé RGBA état. Si vous voulez voir ce qui s'accumule dans votre application à travers plusieurs passes, prendre un tas de tir des crédits alloués à chaque point que vous répétez la même action dans votre application. Les objets que vous y voir à chaque passage s'accumulent dans la mémoire, et vous devriez être en mesure d'identifier la ligne sur laquelle ils sont créés.
Merci beaucoup, cela aide beaucoup. Je serai heureux d'accepter berylliums - et votre réponse.
OriginalL'auteur beryllium