Не нужно полагаться на удачу:)
alloc, copy, new и mutableCopy означают, что вы являетесь владельцем объекта. Оба из них дадут вам оставленный объект. Если вы управляете памятью, вам нужно освободить ее.
По соглашению, другие методы предоставят вам автоматически освобожденный объект.
Например, если вы хотите автоматически освобождать объект, вы можете вызвать:
NSString *str = [NSString stringWithString:yourString];
См. Руководство по управлению памятью:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html
В частности, четыре правила здесь:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html
Вам принадлежит любой созданный вами объект
Вы создаете объект, используя метод, имя которого начинается с «alloc», «new», «copy» или «mutableCopy» (например, alloc, newObject или mutableCopy).
Наконец, оба копируют строку.
из документов NSString:
initWithString:
Возвращает объект NSString, инициализированный путем копирования символов из другой заданной строки.
копия из NSObject. Он определяет копию как:
Возвращаемое значение
Объект, возвращаемый методом протокола NSCopying copyWithZone :, где зона равна nil.
NSString реализует протокол NSCopying, поэтому copy возвращает копию строки.
Существует одно исключение, когда строка не копируется initWithString - если вы передадите строковый литерал, он обернет указатель на константу и проигнорирует сохранение / освобождение. Смотрите здесь, если вам интересно: Разница между NSString литералами