Не звоните retainCount
retainCount
бесполезно. Абсолютное количество сохраняемых объектов - это деталь реализации. Правило простое; если вы заставляете что-то сохраняться, вы должны сделать так, чтобы это было выпущено, когда вы закончите с этим. Конец истории.
Документация по управлению памятью обсуждает это полностью.
<Ч />
Во-первых, retainCount
может никогда не возвращать ноль . Единственный раз, когда вы получите ноль, это если вы попали в сообщение nil
. Это:
NSLog(@"Array2 : %d",[arrayDetail retainCount]); //RETAIN COUNT IS 0
arrayDetail = [[finalResult objectForKey:@"Detail"]
NSLog(@"Array2 : %d",[arrayDetail retainCount]); //RETAIN COUNT IS 2
Вы заставляете arrayDetail
указывать на другой объект во второй строке. Таким образом, нет никакой связи между счетом сохранения до / после этой строки.
Когда утечка говорит вам, что утечка находится на определенной линии, как эта ...
arrayDetPerformance = [[NSMutableArray alloc] initWithArray:arrayDetail];
... он говорит вам, что указанный объект, выделенный на этой линии, был утечкой. Это не говорит вам, что конкретная линия была причиной утечки. Вероятно, утечка произошла из-за того, что вы либо перенесли ее в другое место, либо забыли об утечке.
Вы сказали в нескольких комментариях, что вы «освобождаете [что-то] в своем освобождении». Покажите реализацию вашего метода dealloc.