Удалите строку [her_string release]
и добавьте autorelease
к copy
.
- (void) foo : (NSString*) ori_string
{
her_string = [[ori_string copy] autorelease];
while ([her_string length]>0)
{
her_string = [her_string substringFromIndex:1];
//do something...
}
}
. Проблема в том, что copy
возвращает строку, которая должна быть освобождена, и вы теряетесослаться на него, переписав строку с помощью substringFromIndex
вызовов.После потери ссылки она никогда не может быть должным образом освобождена, и поэтому первая скопированная версия строки утечет (если length > 0
, в противном случае ваш код правильно освобождает строку).
substringFromIndex
возвращает уже автоматически освобожденную строкутак что вам не нужно беспокоиться об этом, пока вы не захотите, чтобы строка сохранялась за пределами текущего пула автоматического выпуска.