NSString * string = @ "someString" против NSString * string = [[NSString alloc] initWithFormat @ "% @", строка] - PullRequest
3 голосов
/ 17 июля 2010

Если у меня есть метод

- (void) myMethod:(NSString *)string {
    [Object anothermethodWithString:string];
}

и я звоню

[Object myMethod:@"this is a string with no alloc statement"]

Мне нужно сделать что-то вроде

- (void) myMethod:(NSString *)string {
    NSString *string2 = [[NSString alloc] initWithFormat:@"%@", string];
    [Object anothermethodWithString:string2];
    [string2 release];
}

вместо того, как у меня был мой метод раньше? У меня неправильный код, который, по-видимому, вызван автоматическим освобождением строки во время вызова второго метода в другом методе (как в примере). Во-вторых, мой метод исправил все мои проблемы.

Так что строка "не распределена" - автоматически освобожденная строка? Я задал этот вопрос в качестве продолжения другого вопроса (который был совершенно не связан и именно поэтому я создаю этот пост), и несколько источников сказали, что мне не нужно перераспределять строку. Я запутался, потому что поведение моего кода говорит мне об обратном.

Ответы [ 2 ]

4 голосов
/ 17 июля 2010

Дейв понял это правильно.Вам нужно беспокоиться только о том, чтобы вызывать release для объектов, которые вы new, alloc, retain или copy.

. Приведенное выше правило работает очень хорошо, но если вам интереснои хочу углубиться в детали, я предлагаю прочитать Руководство по программированию управления памятью из документации Apple.Это бесплатно и идет от базовых понятий во множество деталей.

2 голосов
/ 17 июля 2010

Если вы используете: NSString * str = @ "". Это своего рода константа, вам не нужно управлять памятью.

Если вы вызываете из метода: NSString * str = [NSString stringWithFormat: @ ""], строка уже автоматически освобождена.

Если вы выделите вручную, init. Вам нужно позвонить в релиз или выполнить авто-релиз самостоятельно.

Общее соглашение о памяти: если вы что-то делаете с new, alloc, retain или copy, вам нужно освободить его самостоятельно, в любых других случаях объект автоматически освобождается, не отпускайте его

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