내 iOS 앱에서 메모리 누수를 추적 한 내가 누수 악기를 사용하여 다음 코드로 돌아오고 계속 :아이폰 OS는 - FMDB 사용 및 메모리
NSMutableArray *resultSet = [[NSMutableArray alloc] initWithCapacity:3];
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
FMResultSet *rs = [db executeQuery:query,equipmentID];
while ([rs next])
{
[resultSet addObject: [rs resultDict]];
}
[rs close];
[innerPool release];
return [resultSet autorelease];
것은이 메모리의 측면에서 (정확한 관리) FMDB 사용? 누출
자세한 스크린 샷 :
감사 데이브, 그래 내가 오버 유지 반환 배열입니다. 각 항목은 UITableView 셀 하위 클래스에 의해 유지됩니다 (합성 된 setter를 통해). 이것들은 재사용 가능한 대기열에 있으며, 대기열의 작동 방식에 대해 이해할 수없는 내용 일 수 있습니다. [자세히] (https://lh6.googleusercontent.com/-ZbnV40_WTrg/TjhOQKjBB4I/AAAAAAAAMtU/1tIUgWIT_MM/s800/leak2.jpg) 누출의 스크린 샷을 보면, BaseCell setData 메소드는 릴리스가없는 유일한 메소드입니다. 베이스 셀의 dealloc에 [data release]를 추가하면 충돌이 발생합니다. 왜 이것이 설정자를 통해 명확하게 유지되는 것처럼 보일 때 충돌이 발생하는지에 대한 아이디어가 있습니까? – Crake
금연 총은 다음과 같이 밝혀졌다. 'while ([rs next]) { result = [rs resultDict]; } '.... 이것은 셀이 데이터를 저장 한 후에 호출되었으며,이 같은 직접 할당은 나쁜 아이디어라고 생각합니다. 나는 ('rs next '로) { result = [ [rs resultDict] 사본]; } ' – Crake
처음에는 Crake와 사전 동의에 동의했지만 fmdb가 이미'copy'를 호출 했으므로 필요하지 않습니다. –