Лучший способ инициализировать / очистить строковую переменную какао - PullRequest
2 голосов
/ 27 мая 2010

У меня есть процедура, которая анализирует текст через цикл. В конце каждой записи мне нужно очистить строковые переменные, но я прочитал, что someString = @ "" на самом деле просто указывает на новую строку и вызывает утечку памяти.

Каков наилучший способ справиться с этим? Стоит ли использовать изменяемые строковые переменные и использовать setString: @ "" между итерациями?

Ответы [ 2 ]

1 голос
/ 27 мая 2010

Вы должны быть осторожны, в этом случае вы создаете NSString: (фабричный метод) или (alloc init или (используя @ "").

Если вы используете @ "", это постоянная строка, см. Здесь: Константа NSString

Если вы используете [[NSString alloc] init], вам нужно освободить его. Вам просто нужно сделать [someString release].

Если вы используете что-то вроде [NSString stringWithFormat: @ ""], вам не нужно освобождать его, потому что оно уже автоматически освобождается во время выполнения

0 голосов
/ 27 мая 2010

Поскольку строки NSS неизменны, вы не можете изменить содержимое строки. И, инициализируя его @, вы фактически создаете постоянный объект NSString.

Вы можете либо работать с NSString, локальным для цикла, и освобождать его в конце цикла, либо вместо этого можно использовать NSMutableString. Я бы предпочел локальную строку цикла, хотя.

for ( ; ;) {
    NSString* str = [[NSString alloc] initWithFormat:@"%@", CONTENT];
    ...
    [str release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...