Jusqu'à iOS 3.2, j'ai utilisé ce genre de code pour charger UIImageView
l'image en arrière-plan, et il a bien fonctionné ...iOS4 & fond [UIImage setImage:]
code:
- (void)decodeImageName:(NSString *)name
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImage *newImage = [UIImage imageNamed:name];
[myImageView setImage:newImage];
[pool release];
}
...
[self performSelectorInBackground:@selector(decodeImageName:) withObject:@"ID"]
. .. même si [UIImageView setImage:]
n'était pas thread-safe!
Mais depuis iOS 4, ça ne marche plus ... Les images apparaissent à l'écran deux secondes après l'appel setImage
. Et si je fais un [myImageView performSelectorOnMainThread:@selector(setImage:) withObject:newImage waitUntilDone:YES]
au lieu de [myImageView setImage:newImage]
, les images apparaissent immédiatement mais semblent être re-décodées à la volée (en ignorant le précédent [UIImage imageNamed:]
qui aurait dû déjà décoder les données d'image), causant une pause sur mon fil principal. Même si la documentation indique Le cache d'image sous-jacent est partagé entre tous les threads..
Une idée?
Bonjour, merci de poser cette question.Je me demandais pourquoi cela ne fonctionne pas maintenant avec mon application. – GeneCode