2011-11-24 4 views
1

UITableView에서 나중에 사용할 TableViewCell에 UIImage 콘센트가 있습니다. 악기에서 이것을 검사 할 때 UIImageView에서 메모리 누수가 발생합니다. UITableViewCell에서 UIImageView를 공개하지는 않습니다. 왜냐하면 tavleViewCell에서 release하면 exc_bad_access가 생기기 때문입니다.UITableViewCell에서 UIImageView를 해제하는 방법?

제 질문은 어디에서 UIImageView를 릴리스합니까?

업데이트

CustomCell.h는

@interface CustomCell : UITableViewCell { 
IBOutlet UIImageView *customImage; 
} 

@property(nonatomic, retain) UIImageView *customImage; 

@end 

CustomViewController.m는

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"CustomCell"; 
CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

cell.customImage.hidden = [[self.customImageList objectAtIndex:indexPath.row] boolValue]; 

return cell; 
} 
+0

내가 아는 한, UITableViewCell 하위 클래스를 사용하고 있습니다. 인터페이스 정의를 포함하여 코드를 pst해야합니다. – vikingosegundo

+0

셀의 dealloc에서 셀이 소유 한 개체를 해제해야합니다. 이 릴리스에서는 예외가 발생해서는 안됩니다. 예외가 발생하면 코드의 유지/릴리스 균형에 문제가 있습니다. – progrmr

답변

0

UITableView는 나중에 다시 사용할 수 있도록 셀을 캐시합니다. 그게 메모리 누수로 표시되지만 결국은 누설되지 않도록 셀을 재사용 할 수 있습니다.

셀에서 화면을 스크롤하면 사용자 정의 UITableViewCell에 의해 유지되는 이미지 뷰를 해제 할 수 있지만 스크롤 할 때 이미지가 다시 필요할 경우 성능 문제가 발생할 수 있습니다.

+0

이 문제에 대해 설명 드리겠습니다. 고마워요. 그대로 두겠습니다. – HardCode

+0

당신이 우리에게 더 많은 정보를주지 않는다면,이 대답은 단지 가정 일뿐입니다. – vikingosegundo

+0

나는 내 자신의 애플 리케이션에서 apparant 메모리 누수를 추적했는데 UITableView에서 내 UITableViewCells 만 남았음을 알았고 화면 밖으로 스크롤하여 더 이상 보이지 않아도 셀을 유지했다. 그러나 그렇습니다. 그것은 이것이 OP를 위해 일어나는 일이라는 가정에 불과합니다. – progrmr

-1

nil로 설정하려고 즉에서의 dealloc :

self.imageViewName = nil; 
+0

아니요, 작동하지 않았습니다. esc_bad_access와 충돌합니다! – HardCode

+1

자, 이제는 코드를 공유 할 때가되었으므로 우리는 여러분이 말하는 것을 알게되었습니다. 바로 앞으로 들려야하기 때문입니다 –

+1

dealloc에서 절대로 자기를 참조하지 말아야합니다. self.imageViewName = nil 대신 [imageViewName release]를 사용하십시오. imageViewName = nil; – lorean

0

우선 무엇을 의미하는지 정의 해 보겠습니다. 진정한 메모리 누수에 대해 이야기 할 때는 힙이 할당되었지만 더 이상 코드의 어느 부분에도 포인터가 없습니다. 그것은 정말로 누출되고, 분실되었으며, 재사용 할 수 없습니다. 누수 도구가이를 누수로 식별하는 경우 누수가 이런 종류라는 것을 의미합니다. 누수가 아니라 누출이 아닌 것이 좋습니다.

누수 도구에 표시되지 않으면 누수가 될 수 있으며 일부는 버려진 메모리와 같은 메모리 누수라고도하는 다른 유형의 메모리 문제 일 수 있습니다.

어떤 경우이든 누출이라고 불리는 이유를 알려 주시고 도움을 받으려면 코드를 게시해야합니다.

관련 문제