NSString initWithFormat утечка памяти stumper - PullRequest
3 голосов
/ 29 августа 2011

XCode предполагает, что метод [NSString initWithFormat] (как указано в окне «Инструменты») является источником утечки памяти. В нем указан конкретный метод, поэтому в этом методе я идентифицировал единственную строку кода с initWithFormat (в отличие от некоторых утечек, определенных в Instruments, эта причина по какой-то причине не приведет меня к точной ошибочной строке кода):

 NSString * name=[[NSString alloc] initWithFormat:@"%@",[[lineArray objectAtIndex:0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] ];

 CustomObject * newData=[[CustomObject alloc] init];
 newData.info=name; // info is a retained NSString ivar of CustomObject

 [name release];
 [self.ivar setObject:newData forKey:@"key"];
 [newData release];

initWithFormat и release находятся в одной и той же области видимости: оба находятся внутри оператора if.

Существуют ли некоторые методы NSString, которые каким-то образом вызывают initWithFormat, если это не очевидно в коде? Такие как эти stringByTrimmingcharactersInSet методы типа?

ОБНОВЛЕНИЕ: я добавил весь код между initWithFormat и release - Кроме того, даже если я изменю initWithFormat на stringWithFormat, Xcode выдаст мне ту же утечку памяти, вместо этого идентифицируя stringWithFormat, так что это явно объект, вызывающий проблему.

1 Ответ

4 голосов
/ 29 августа 2011

Инструменты не показывают, где объект был протек;оно показывает, где был вытек объект , созданный .Так что, вероятно, происходит то, что вы не выпускаете info ivar вашего CustomObject класса в его методе dealloc.Либо так, либо вы чрезмерно удерживаете этот объект где-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...