я следующий код:- [NSString componentsSeparatedByString:] утечка
NSString *indexText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (indexText==nil) {
[indexText release];
indexText = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
}
[data release];
NSAutoreleasePool *innerPool = [NSAutoreleasePool new];
NSArray *packageList = [indexText componentsSeparatedByString:@"\n\n"]; //if commented out, there's no leak
[indexText release];
[innerPool drain];
Я выполняя componentsSeparatedByString:
на indexText
, но я просачиваться совсем немного памяти, несмотря на тот факт, что packageList
является autoreleased (доказано по тому, что код сработает, если я попытаюсь его снова выпустить). Когда я прокомментирую строку с componentsSeparatedByString:
, утечка исчезнет.
Кстати, я просматриваю использование памяти в Activity Monitor во время работы iPhone Simulator; Инструменты не обнаруживают утечку. Является ли утечка просто иллюзией, особенностью симулятора?
Кстати (не связанный с вопросом): if (indexText == nil) [indexText release] не имеет никакого смысла. Если инициализатор возвращает nil, он освободит объект - вам не нужно ничего отпускать. И действительно, вы не могли даже отправить это сообщение, потому что вы не получили указатель на объект, который хотите выпустить, так как он равен нулю (0x0). – 2010-11-28 12:54:52
Хорошо, это имеет смысл. Я думал, что, поскольку я вызывал `[NSString alloc]`, мне пришлось бы освободить его; спасибо за это. – denizen 2010-11-28 19:23:50