Нужно ли выпускать постоянную строку NSString? - PullRequest
3 голосов
/ 24 апреля 2011

Я читаю правила управления памятью до того места, где было сказано

- (void)printHello {

    NSString *string;

    string = [[NSString alloc] initWithString:@"Hello"];

    NSLog(@"%@", string);

    [string release];

}

у вас есть право собственности и вы должны выпустить string, но мне любопытно, что за @"Hello". @" " - это синтаксис для создания и NSString, и это объект. Так разве это не просочилось?

Ответы [ 2 ]

10 голосов
/ 24 апреля 2011

@"…" является буквальным экземпляром NSString.Когда компилятор видит литеральную строку, он отображает строку в двоичный файл (например, вашу программу), и строка доступна как объект NSString, когда двоичный файл загружен (например, при запуске вашей программы).Вам не нужно управлять памятью, занятой литеральными строками, потому что они являются неотъемлемой частью вашего двоичного файла - они всегда доступны, они никогда не освобождаются, и вам не нужно беспокоиться об управлении их памятью.

1 голос
/ 10 августа 2011

Ответ Бавариуса правильный.Для любопытных могу добавить, что это задокументировано в «Руководстве по программированию строк» ​​Apple, а именно в разделе « Создание строк », где говорится (выделено мое):

Простейший способ создания строкового объекта в исходном коде - использовать конструкцию Objective-C @"...":

NSString *temp = @"/tmp/scratch";

Обратите внимание, что при создании строковой константы таким способом выследует использовать символы UTF-8. Такой объект создается во время компиляции и существует во время выполнения вашей программы.Компилятор делает такие объектные константы уникальными для каждого модуля, и они никогда не освобождаются.

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