2010-02-22 4 views
4

나는 다음과 같이 각 사용자 지정 셀에 하위 뷰으로 추가 할있는 UIButton와 함께,의 tableview를 사용하는 응용 프로그램이 있습니다 내가 확인하기 위해 악기를 사용하기 시작 때까지 모든 괜찮다고 생각단추를 하위보기로 추가 할 때 메모리 누수가 발생하는 이유는 무엇입니까?

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 

    checkButton = [[UIButton buttonWithType:UIButtonTypeCustom] initWithFrame:CGRectMake(2.0, 2.0, 40.0, 40.0)]; 
    [cell.contentView addSubview:checkButton]; 

    // lot's of other code 

    return cell; 
} 

를 I 어떤 메모리 누수도 없었지만 UIButton을 셀의 하위보기로 추가하면 UIKit 내에 누수가 발생하는 것으로 나타났습니다.

특히, 각 셀 행 (단추가 하위보기로 추가 될 때마다)에 누수가 발생하고 누출 된 개체는 책임 프레임이 "- [UIView _createLayerWithFrame :]"인 "CALayer"입니다.

여기 뭔가 잘못 되었나요?

답변

5

코드는 [있는 UIButton buttonWithType] 방법은 이미 initWithFrame 방법을 포함 풀어 자신의처럼

또한, 당신은 addSubview 후 [체크 버튼 해제]를 놓아야합니다. CGRectMake를 사용하고 단추의 프레임을 설정해야합니다.

rectangle = CGRectMake(2.0f,2.0f,40.0f,40.0f); 
checkButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
checkButton.frame = rectangle; 
+0

그걸 고쳐 줘! 도와 주셔서 감사합니다. (그리고 남자들, 너희들은 응답이 빠르다.) –

+0

"UIButton * checkButton ="을 추가하면 한 메모가 내 앱을 중단 시키지만, 마치 "checkButton ="과 같이 남겨두면 괜찮은 것 같다. . –

+0

죄송합니다. 헤더에 신고해야합니다. 허용하는 경우 내 의견을 편집합니다! – Justin

0

실제 장치 또는 시뮬레이터에서 테스트 했습니까?

시뮬레이터에는 실제 장치 코드와 비교하여 약간의 메모리 관리 차이가있는 것으로 알려져 있습니다. 실제 장치에서 항상 메모리 누출 테스트를 실행해야합니다.

그렇지 않으면 코드가 저에게 맞게 보입니다.

0

checkButton이 클래스의 @ 속성 (보유)입니까?

이 경우 사용 후 속성을 null로 설정해야하기 때문에 셀의 셀 수명주기가 사용자의 통제하에 있지 않기 때문에 설정할 수 없습니다. 지역 변수를 사용하는 것이 더 좋습니다. addSubview 코드가/유지

+0

아니요, 결코 alloc'ed, new'ed 또는 copy'ed가 아니기 때문에'[checkButton release]'를 호출하면 안됩니다. 그러나 보유 속성 인 경우 null을 지정하는 것이 좋습니다. –

+0

버튼이 클래스 메소드를 통해 만들어 졌으므로 자동으로 리사이즈됩니다. – Justin

+0

나는 autorelease를 놓쳤다, 미안. –

관련 문제