2010-10-22 4 views
1

Je suis en train de mettre en œuvre le chargement d'image asynchrone dans UITableView, Si je fais défiler les lignes rapidement mon application se bloque en raison du message envoyé à zombie ... Qu'est-ce qui ne va pas, je fais ici?Zombie tue mon application

//loading image from URL 
-(void)loadImageFromURL:(NSURL*)url { 
    if (connection!=nil) { [connection release]; } 
    //data is NSMutableData 
    if (data!=nil) { [data release]; } 

    NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 

//Append received data when it is received 
- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData { 
    if (data==nil) { data = [[NSMutableData alloc] init]; } 
     [data appendData:incrementalData]; //Message sent to zombie, app CRASHES HERE 
} 

//When finished 
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection { 
    //so self data now has the complete image 
    [connection release]; 
    connection=nil; 
    //Use received data to construct image 
    [data release]; 
    data=nil; 
} 
+0

Étant donné que votre application se bloque lors du défilement, il peut être utile de voir le code de ce qui se passe dans 'tableView: cellForRowAtIndexPath:' – bosmacs

+0

Est-ce que "data" est un NSData ou un NSMutableData? –

+0

@Evan il est 'NSMutableData' –

Répondre

5

ici:

if (connection!=nil) { [connection release]; } 
if (data!=nil) { [data release]; } 

vous libérons les données. Plus tard, vous essayez d'utiliser les données publiées afin qu'il se bloque. Essayez ceci:

if (connection!=nil) { [connection release]; connection = nil; } 
if (data!=nil) { [data release]; data = nil; } 

De cette façon, vos déclarations if vont effectivement déclencher.

+0

Merci beaucoup, vous fait ma journée! –