2012-01-14 3 views
0

UIViewControllerUITableViewDelegateUITableViewDataSource으로 구현되었습니다.UITableView viewForHeaderInSection- 자동 렌더링 된보기에서 응용 프로그램이 충돌 함

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

UILabel *label = sectionHeaderLabel(); 

switch (section) { 
    case 0: 
     label.text = @""; 
     break; 
    case 1: 
     label.text = @"Points"; 
     break; 
    case 2: 
     label.text = @"Problems"; 
     break; 
    default: 
     label.text = @""; 
     break; 
} 

// Create header view and add label as a subview 
UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; 
[view addSubview:label]; 
[label release]; 

return view; 

}

컴파일러는 내가보기에 관련된 메모리 누수가 불평하고 나는 그것을 autoreleasing해야 실현 : 나는 viewForHeaderInSection 방법을 사용하여 섹션 헤더를 정의하고있다. 하지만 내가 할 때 내 앱이 충돌하여 내비게이션 컨트롤러에서 뷰를 팝하기 위해 뒤로 버튼을 누르십시오.

이 기능은 무엇입니까?

답변

0

문제는보기 대신 레이블과 관련 될 수 있습니다.

sectionHeaderLabel() 메서드가 자동 렌더링 된 레이블 객체를 반환합니까? 그렇다면 레이블을 하위보기로 추가 한 후에 명시 적으로 레이블을 해제해서는 안됩니다.

[라벨 해제]를 삭제 해보세요. 그리고 [view autorelease]를 반환하는 것;

+0

스팟 - 온! 감사! – jay492355

+0

이것이 새로운 프로젝트이고 iOS 3.x를 지원하지 않는 경우 ARC를 켜는 것이 좋습니다. 이런 실수를 저지를 수 있습니다. –

0

추가 개발을 진행하기 전에 memory management rules을 읽어야합니다. 많은 슬픔을 덜어줍니다.

자동으로 해제 된 개체를 반환한다는 것을 나타내는 메서드에서 +1 된 유지 된 개체 (일치하지 않는 init)를 반환하기 때문에 Clang (컴파일러가 아님)이 불평하고 있습니다.

그러면 Nick 상태에서 sectionLabelHeader()에서 자동 렌더링 된 객체를 반환하고있을 것입니다. 따라서 '보기'의 지나친 보류로 인해 '라벨'이 과도하게 공개되지 않습니다.

마지막으로 왜 C 함수를 사용하여 UILabel *을 반환합니까? AFAIK는 합법적이지만 오히려 정통적입니다. 그것이 Clang도 여행한다면 그것은 놀랄 일이 아닙니다. 자동 참조 계산 (ARC)으로 이동할 때 문제가 발생할 것입니다. 나는 대신 당신이 방법을 사용하는 것이 좋습니다 것이거나, 당신이 공장에 갈 경우 클래스 방법.

+0

C 함수 대신에 메서드를 사용하는 것에 대해 조언 해 주셔서 감사합니다. 전 궁금하네요 : 내가 여러 가지보기를 통해 사용하는 모든 종류의 사전 설정된 속성 (글꼴 크기, 텍스트 색상 등)을 가진 사용자 정의 레이블을 가지고 있다면 범주를 사용하여 UILabel을 하위 클래스로 확장하거나 UILabel을 확장하는 것이 더 낫습니다. 단순히 factory 메소드를 호출할까요? – jay492355

+0

메소드를 오버라이드 (override) 할 필요가있는 경우는 서브 클래스 만이라고 말하고 싶습니다. UILabel의 카테고리가 속성을 설정하기 만하면됩니다. 접두어 (꼭 개인적으로는 접미사를 사용하여 가독성을 선호)를 사용하면 현재 또는 미래의 개인적인 방법과 충돌하지 않도록 할 수 있습니다. + labelWithCustomProperties_JAG {}와 같은 것입니다. –

관련 문제