2010-12-05 5 views
0

indexPath를 사용하여 관련 셀에 대한 참조를 가져 와서 확인 표시를 제거하고 싶습니다. 나는이에 대한 cellForRowAtIndexPath를 사용할 수 있다고 생각하지만, 나는 메시지를 얻을 :cellForRowAtIndexPath의 메모리 누수 :

__NSAutoreleaseNoPool() : 자리에없는 풀과 오토 릴리즈 클래스 jQuery과의 객체 0x685a600을 - 단지에도이 같은 간단한 라인

누출 :

[self.tableView cellForRowAtIndexPath:indexPath]; 

따라서 포인터를 셀로 반환하는 것이 아닙니다. 어쩌면 나는이 방법이 무엇을위한 것인지 오해하고있다. accessoryView를 변경하기 위해 단순히 셀 참조를 가져올 수 있습니까? 감사합니다.

+1

코드를 더 볼 수 있습니까 (예 : 액세서리 항목을 삭제할 때 사용하고있는 코드)? 하나의 무해한 라인에서 아무 것도 말하기가 어렵습니다 ... – BoltClock

+0

예, 백그라운드에서 선택기를 수행하고있었습니다. 나는 autorelease가 돌려 보내진 가치에 보내 졌다는 것을 몰랐다. 메모리 관리 안내서에서이 내용을 읽었습니다. 나는 그것을 놓쳐 버렸음에 틀림 없다. 하지만이 중요한 것을 지적 해 주셔서 감사합니다! 방금 NSAutoreleasePool을 만들었고 모든 것이 정확합니다. –

답변

1

이 오류 : _NSAutoreleaseNoPool()은 일반적으로 정확하게이 것과 관련되어 있으며 자동 해제 풀이 없습니다. Autoreleasepools는 스레드 기반이므로, 백그라운드 나 다른 스레드 (이 작은 코드로는 알기 힘든)에서이 코드를 실행하는 경우 해당 스레드에 NSAutoreleasPool을 작성하고 실행을 완료 한 후에 릴리스해야합니다 .

+0

사실 이것은 문제였습니다 ...하지만 자동 풀 풀이 필요한 이유는 무엇입니까? cellForRowAtIndexPath : 모든 데이터를 할당합니까? 이미 존재하는 셀에 대한 포인터 만 반환합니까? 당신의 도움을 주셔서 감사합니다! –

+0

오류 메시지가 나타납니다 UITableView 유출. 조 블로우 (Joe Blow)가 정확하게 아래를 지적하면 (암시적인) getter가 문제입니다. 관례 상 getter의 반환 값은 자동으로 릴리즈됩니다. 그래서 그냥 self.tableView; autoreleasepool이 없으면 자동으로 누출됩니다. tho 아래의 @Joe Blum과는 달리 getter는 잊어 버리는 것이 좋지만 autoreleasepools가있는 rahter는 좋습니다. – LordT

+0

@Joe : setter 및 getter 자체 외에,이 속성을 사용하지 않으시겠습니까? – LordT