代码之家  ›  专栏  ›  技术社区  ›  Prashant Cholachagudda

僵尸杀了我的应用程序

  •  1
  • Prashant Cholachagudda  · 技术社区  · 15 年前

    我正在实现异步图像加载 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 回复  |  直到 15 年前
        1
  •  5
  •   Alejandro    15 年前

    在这里:

    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 语句将实际触发。