2010-11-19 7 views
0

Fellow developers,Fuite d'objet après l'ajout d'une sous-vue

J'essaie de définir une image Web comme arrière-plan pour un UIButton. Tout fonctionne sauf quand je construis et que je l'analyse montre que aImage a encore une référence +1. L'ajout d'une version pour aImage après addSubview ne le résout pas. Je pense que je pourrais le résoudre en sous-classant et en écrivant un dealloc personnalisé mais cela se sent comme une solution compliquée. Est-ce que quelqu'un a des suggestions? Merci !

UIImage *aImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:mUrl]]; 
[myOverviewButton setBackgroundImage:aImage forState:UIControlStateNormal]; 
[aView addSubview:myOverviewButton]; 

Répondre

1

Ajoutez une autorelease à l'image aImage ou appelez-la manuellement. Lorsque vous appelez setBackgroundImage :, le bouton effectue une retenue sur l'image. Quand vous avez fait le alloc/init vous avez fait une retenue qui n'a jamais été libérée.

+0

Cela a fonctionné comme un charme! Merci ! – Wicketman

0

Dès que le code affiché est terminé, aImage doit avoir un nombre de références de 2: 1 provenant de l'appel alloc et un de l'appel setBackgroundImage:forState:. Vous devez libérer après setBackgroundImage:forState: pour équilibrer le alloc, mais vous aurez toujours un nombre de références égal à 1. Ceci est attendu - sinon, myOverviewButton n'aurait pas d'image pour fonctionner. Il devrait descendre à 0 lorsque myOverviewButton désaffecte.