Ответ 1
Нет, это компиляционный постоянный строковый объект, поэтому его не нужно выпускать. Это моральный эквивалент char * c = "hello world" - где мир hello world находится в глобальных данных, и вы назначаете адрес этих данных указателю c.
Если я создаю NSString, используя приведенный ниже код, нужно ли мне освобождать someString?
NSString *someString = @"somestring";
Нет, это компиляционный постоянный строковый объект, поэтому его не нужно выпускать. Это моральный эквивалент char * c = "hello world" - где мир hello world находится в глобальных данных, и вы назначаете адрес этих данных указателю c.
Если вы создали объект с помощью вызова метода, который содержит alloc
, retain
или copy
, или начинается с new
(NARC = "narc" ), вы отвечаете за releasing
объект. Если это не так, вы можете игнорировать объект.
Итак, в случае строк:
NSString * myString = @"This is a string";
Я не вижу там вызова метода NARC, поэтому вы не отвечаете за его освобождение. Это действительно так просто.
Нет, поскольку это постоянная строка времени компиляции, вам не нужно ее выпускать. Фактически, это приведет к ошибке во время выполнения.
Я проверил этот случай отличается от NSString *someThing = @"someThing";
они должны освобождать urlString из-за
[[NSString alloc] initWithFormat:@"%@%@", baseURLString, queryTerm];
В любом месте, где вы используете alloc/init, вы его не выпускаете.
Итак, проверьте, что делает Apple в разделе "Вставить данные с помощью запроса POST" на следующую ссылку :
Я вижу a [urlString release];
, почему?
Если это постоянная строка времени компиляции, не было бы необходимости ее сохранять. Правильно ли это?