2014-01-11 2 views
0

이미지를 표시하는 사용자 정의 셀을 사용하여 UItableView를 작성합니다. 문제는 내가 아래로 스크롤하면 이전 셀이 dealloc을 수행하지 못하고 장치 메모리가 가득 차는 것입니다. 위에서 언급 한 바와 같이UITableView 셀에서 dealloc을 수행하지 않습니다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"SimpleTableItem"; 
    CustomTableCellView *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath]; 

    if (cell == nil) { 
     cell = [[CustomTableCellView alloc] initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:simpleTableIdentifier]; 
    } 

    Article *tempArticle = [_objects objectAtIndex:indexPath.row]; 
    cell.titel.text = tempArticle.title; 
    cell.subTitle.text = tempArticle.subTitle; 
    cell.category.text = tempArticle.category; 
    if(tempArticle.imageUrl){ 
     [cell.image setImageWithURL:[NSURL URLWithString:tempArticle.imageUrl]]; 
    } else { 
     cell.image.image = [UIImage imageNamed:@"video"]; 
    } 

    return cell; 
} 

enter image description here

+0

셀은 다시 사용되므로 테이블보기에서 할당 취소되지 않습니다. 중단 점을'if '안에 넣으면 테이블이 기존 셀을 큐에서 꺼낼 수 있기 때문에 초기로드 후에 중단 점에 더 이상 멈추지 않습니다. 문제는 다른 곳에서 발생할 가능성이 큽니다. –

+0

당신은 세포가 방출되고 있지 않다고 추측하고 있습니다. 인스트루먼트를 통해 앱을 실행하고 두 개의 메모리 스냅 샷을 사용하여 어떤 오브젝트가 메모리를 사용하는지 정확히 확인하십시오. – Abizern

+0

좋아요, I. 재사용하도록하십시오,하지만 왜 메모리를 채우고 있습니까? – Verendus

답변

0

나는 메모리 증가가 이미지 로딩 & 캐싱으로 인한 것임을 확신합니다. AFnetworkingNSCache 인스턴스를 사용하여 다운로드 한 이미지를 캐시합니다.이 캐시는 메모리에서 수행되며 메모리가 부족하다고 시스템에서 결정할 때 소모됩니다. 이는 문제가되지 않습니다.

또한 imageNamed 메서드는 AFNetworking과 같은 방법으로로드 된 이미지를 캐시합니다.

누출이 있는지 또는 데이터가 제대로 작동하지 않는지 확인하려면 메모리가 동일하게 유지되거나 문제가없는 것보다 위로 스크롤 한 후 메모리가 증가하는지 확인하십시오. 누출 (장비로 누설을 확인할 수도 있음), 캐시 된 이미지는 메모리 증가를 유발하는 이미지입니다.

또한 스택에서보기 컨트롤러 (팝업, 제거)를 제거하면 메모리가 줄어들면 텍스트, 레이블 또는 기타 데이터 (이미지가 아님)에 대한 할당이 해제됩니다 (상당한 감소는 없습니다) 그러면 올바른 길을 가고 있습니다.

0

, 제대로 재사용 식별자를 설정하는 :

내 코드입니다. 당신이 당신의 세포에 대한 이미지를 다운로드 AFNetworking 라이브러리와 를 사용하고 있기 때문에

아마 메모리를 채우는거야? "메모리를 가득 채우십시오"를 더 정확하게 정의하십시오.

+0

좋아요. 메모리 "라는 말은 장치 메모리가 더 많이 사용되는 스크롤을 의미합니다. 아마 메모리를 차지하는 이미지 일 겁니다. 그리고 [셀.image setImageWithURL : [NSURL URLWithString : tempArticle.imageUrl]]; 스크롤을 내려도 여전히 많은 메모리를 차지하지만 많지는 않습니다. 내가 생각하는 텍스트는 어느 것인가. – Verendus

관련 문제