저는 왜 이것이 유출되고 있는지 알아 내려고 제 머리를 꺼내 왔습니다. 내 .h 파일에서 NSMutableArray 유지 nonatomic 합성 된 속성이 있습니다. 내 애플리케이션 전체NSMutableArray에 누수가 있습니다.
self.tableData = [[NSMutableArray alloc] init];
[self.tableData removeAllObjects];
fillData(self.tableData);
, I는 [self.tableData removeAllObjects] 호출하고 fillData (self.tableData) 함수를 다시 채울 내에서의 viewDidLoad는 I로 선언. 내가 내 할당 해제의 방법에서
void fillData(NSMutableArray* list)
{
for (set<string>::const_iterator itr = sortedData.begin(); itr != sortedData.end(); ++itr){
[list addObject:[NSString stringWithFormat:@"%s", ((string)*itr).c_str()]];
}
}
:
[self.tableData removeAllObjects], [self.tableData release], tableData = nil;
는 어디에서 볼을 드롭 않은이 함수는 정적 C++ 문자열 세트에서 데이터를 채워? Instruments는 [list addObject ....] 행에 있다고 말합니다.
감사
'((string) * itr) .c_str()'호출이 자동 릴리즈되지 않은 문자열을 반환합니까? –
네,하지만 자동으로 해제되어야하는 NSString으로 복사됩니다. 그래서 이것이 어떻게 누출을 일으키는 지 잘 모르겠습니다. NSString 대신에 alloc/autorelease를해야합니까? – Alede
괜찮아요. 만약 당신이 줄을 두 개로 나눠서'const char * s = (* itr) .c_str(); [목록 addObject : [NSString stringWithUTF8String : s];'? – Yuji