2009-03-05 3 views
0

UICachedDeviceWhiteColor를 표시하는 메모리 누수가 있습니다. 난 어디서나 UICachedDeviceWhiteColor를 사용하지 않고 있습니다. 사람들이 이것이 iPhone-SDK의 버그라고 말합니다. 나는이 블로그 항목을 발견 : http://piezoelectrics.blogspot.com/2009/02/uicacheddevicewhitecolor-leak-in-iphone.html테이블 셀 mem 누수에 대한 UICachedDeviceWhiteColor 및 NSAutoRelease

을하지만 난

#import "NSAutoreleasePool.h" 

은 내가 "오류 : NSAutoReleasePool.h : 그런 파일이나 디렉토리"얻을 찾을 수 없습니다. 이 메모리 누수에 대한 수정이나 nibs에서 테이블 셀을 할당하는 올바른 방법이 있습니까? 여기

내가 현재 그것을하고있어 방법은 다음과 같습니다

내가 여기 ALLOC이 표시되지 않는

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

UITableViewCell *cell = nil;  
cell = [tableView dequeueReusableCellWithIdentifier:@"CellNameIdentifier"]; 

if (cell == nil) { 
[[NSBundle mainBundle] loadNibNamed:@"CellName" owner:self options:nil]; 
//cellName is IBOutlet to XIB's tablecell. I reference it several times in this calss 
cell = cellName; 
} 

return cell; 

은} 그래서 왜 MEM 누출이있을 것입니다? 이 문제가 될 수 있습니다 :

답변

1

속성 선언 때문에, 당신의 cellName 속성에 대한 sythesized setter는 전달 된 개체를 유지합니다.

dealloc 메소드에서 cellName에 릴리스 메시지를 보내야합니다.

또한, cellView가 요청 될 때마다 nib를로드 할 필요가 없습니다. cellName! = nil인지 확인한 다음 cellView에서 reuseIdentifier를 설정하여 dequeueReusableCellWithIdentifier에서 찾을 수 있도록하십시오.

1

사실, 테이블 뷰 셀에 NIB를 사용하는 경우 (실제로 맞춤식 작업을 수행하지 않는 한 일반적으로 필요하지 않음) 재사용 가능한 테이블에 히트를 기록하지 않을 때마다로드해야합니다 뷰 셀. 나는 다음과 같은 코드를 조금 청소기를 보이는 생각 :

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyID"]; 
if (cell == nil) { 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CellName" 
        owner:self options:nil]; 
    cell = [nib objectAtIndex:1]; 
} 

objectAtIndex : 셀이 NIB (제로 객체가 파일 소유자)의 첫 번째 개체 인 경우 1 개 트릭을 사용할 수 있습니다. 테이블 뷰 셀을 수행하기위한

일부 노트 :

  • 암시 적 속성이나 수동으로 할당하거나 휴대 객체를 보유하지 마십시오. 이렇게하면 셀 메모리를 확보 할 수 없으므로 재사용 가능한 테이블 셀 기능이 제대로 작동하지 않게됩니다.
  • 인터페이스 빌더에서 셀 재사용 식별자를 설정하는 것을 잊지 마세요. NIB를 사용하는 경우 코드에서 수행 할 수 없기 때문입니다.
  • 항상 셀이 자동으로 릴리즈되었는지 확인하십시오. 자동으로 처리하거나, 자동 레이아웃 된 메모리를 반환하는 코코아 함수를 사용하고 있는지 확인하십시오 (objectAtIndex : 메소드 에서처럼).
+0

# 1의 경우 속성 속성에는 '비 원자'만 포함됩니까? # 3의 경우, 셀은 자동으로 자동 삭제됩니다 ... dealloc -하지만 그건 당신이 옳다는 뜻이 아닙니다. – 4thSpace

+0

나는 (너무 짧다) 코멘트에서 정교하게 다룰 수 없다. 객관적인 C 메모리 관리 용지를 읽을 필요가있는 것 같습니다. 참조 횟수를 확실하게 파악하고 유지, 해제 및 철회를 확인하십시오. autorelease 섹션도 있습니다. 제가 도와 드릴 수 있으면 [email protected]으로 메일을 보내주십시오. –