Зомби убивает мое приложение - PullRequest
1 голос
/ 22 октября 2010

Я реализую асинхронную загрузку изображений в UITableView. Если я быстро прокручиваю строки, мое приложение вылетает из-за сообщения, отправленного зомби ... Что я делаю здесь неправильно?

//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;
}

1 Ответ

5 голосов
/ 22 октября 2010

Здесь:

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

вы выпускаете данные. Позже вы попытаетесь использовать опубликованные данные, чтобы они вылетали. Попробуйте это:

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

Таким образом, ваши if операторы действительно сработают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...