2010-11-30 6 views
0

는 내가있는 UITableViewController을 가지고 있고 그래서 같은 viewDidLoadMethod 일부 속성을 설정합니다UITableView 유출?

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self.parentViewController.parentViewController action:@selector(dismissSettings)] autorelease]; 
    [self setTitle:@"Gabbai Settings"]; 

    //Set up the table 
    [self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped]; 

    [self.tableView setRowHeight:65.0]; 
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLineEtched]; 

    [self.tableView.backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@_settings", kTheme] ofType:@"png"]]]]; 


} 

이 앱은 UIScrollViewController하고있는 UIButton을 보여줍니다. 단추를 누르면 응용 프로그램에 모달 UINavigationController가 표시되고 UINavigationController에는 UITableViewController가 표시됩니다.

누출은 UITableViewController를 표시 할 때 누수가 있음을보고합니다. 그러나 //Set up the table 이후 네 줄을 주석으로 처리하면 모든 것이 잘됩니다.

Screenshot of Leaks Instrument

내가 여기 무슨 일이 일어나고 있는지 잘 모르겠지만, 정말 짜증나 : 네 줄이 주석 때

는 누수 장비는 다음을 보여줍니다. 전에 UITableViewController를 사용자 정의하기 위해 동일한 네 줄의 코드를 사용했습니다. 이것은 새로운 동작입니다.

무엇이 잘못 될 수 있습니까?

답변

1

, 당신의 문제는 라인 :

[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped]; 

그것은 새로운 UITableView 객체를 생성하고이 그 라인을 의미 완전히 무의미 self.tableView을 수정하지 것입니다. 겪고있는 누출 만 생성합니다. 그것을 제거하면 괜찮을 것입니다.

+0

어떻게하면 테이블보기의 스타일을 변경합니까? – Moshe

+0

'UITableView'가 생성 될 때 테이블 스타일을 변경할 수 없습니다. NIB와 Interface Builder를 사용하고 있습니까? 그런 다음 스타일을 변경할 수 있습니다. 그렇지 않으면'loadView'에서 또는'initWithStyle :'을 사용하여'UITableViewController'를 생성 할 때 할 수 있습니다. –

+0

제거하면 문제가 해결됩니다. – Moshe

0

테이블 뷰가 아니라 배열이나 사전이 누출 된 것처럼 보입니다.

테이블 뷰를 채우기 위해 사용하는 배열은 무엇입니까?

또한, 당신은 늘 [self.tableVIew initWithFrame에, 이 [self.tableView setFrameCGRectMake(x,y,w,h)];

+0

참조 사항을 알려주십시오. – Moshe

+0

글쎄요, 누출의 이미지에 따르면 어딘가에서 배열/사전이 새어 나옵니다. – WrightsCS

+0

UITableView를 다시 초기화하면 이전 내용의 내용이 누수되므로 NSArray 누출이 유출됩니다. – Moshe

1

시도 self.tableview이 이미 존재하는 경우, 다시 초기화하지 않으려합니다. 어느 한 번 초기화 (이미 펜촉에서로드하여 이미 수행 한 것으로 추측)하고 필요하면 프레임을 재설정하십시오.

또는 여기에 tableview를 할당/초기화하십시오.

+0

우승자가 있습니다! + 1 – Moshe

1

어쩌면 당신은, 변수로서 uiBarButtonItem을 정의하려고 탐색 왼쪽 막대 버튼 항목에 할당 한 다음 &이 빌드 메뉴에서 분석 구축하려고

이 가지고있는 버튼을 해제 할 수 있습니다? 2.0 Objective C 문장은 상당히 정확합니다.

또한 속성 정의에주의를 기울여야합니다. self.tableView를 사용하고 있습니다. @property (nonatomic, retain) 같은 것을 가지고 있다고 가정합니다. 일단 할당하면 다음 줄의 속성을 해제해야합니다.

마지막으로이 줄은 매우 이상합니다. [self.tableView initWithFrame : self.tableView.frame style : UITableViewStyleGrouped]; self.tableView.frame이 잘못되어 있어야하기 때문에 이미 초기화 된 테이블을 초기화하려고합니다. 그 외에도 initWithFrame 메서드는 할당되지 않은 무언가를 반환합니다.이 작업을 더 잘 수행 할 수 있다고 생각할 수 있습니다.

불편을 끼쳐 드려 죄송합니다. 채팅에이 질문에 답변 해 주셨지만 불행히도 당신은 연결이 끊어졌습니다.

희망이 도움이됩니다.다른 답변으로 지적 된 바와 같이

2

dealloc 메서드에서 tableView를 명시 적으로 해제하고 어떤 일이 발생하는지 확인하십시오.

또는 더 나은 아직, 모든 청소 -> 빌드 및 분석, 당신은 내가 수동으로`cellForRowAtIndex` 방법 내부의 모든 것을 설정하고있어, 배열을 사용하지 않는

+0

이 위대한 팁을 가져 주셔서 감사합니다. 때때로 작동하지만 항상 그런 것은 아닙니다. – Moshe

+0

tableView를 해제하면 다음에로드하려고 할 때 충돌이 발생합니다. – Moshe

+0

모쉐 누군가가 당신을 도울 수 있도록 더 많은 코드를 게시해야합니다. 우리가 보여주는 것은 기본적인 객체 보존 문제입니다. 이후에도 문제가 계속된다면 다른 많은 일이 될 수 있습니다. –

관련 문제