Вы не предоставили много информации, но именно так вы создаете объекты NSString и присваиваете им, что, возможно, переменные экземпляра в вашем синглтоне. То, что вы, возможно, захотите остерегаться, это то, что вы освобождаете старые объекты перед тем, как назначить новый переменной. Что-то потенциально может пойти очень плохо, если что-то получит доступ к этой переменной между выпуском и назначением. Если вам не требуется поддержка Objective-C до версии 2.0, я бы предложил использовать синтезированные свойства, поскольку они надежно решают такие проблемы с памятью.
Автоматическое освобождение объекта означает, что объект автоматически освобождается на более позднем этапе. Вы можете использовать автоматическое освобождение в ситуациях, когда вы выделяете объект, но у вас нет возможности освободить его самостоятельно, например, в таком удобном методе выделения, как этот:
+ (id)newObject
{
return [[[MyClass alloc] init] autorelease];
}
В руководствах по управлению памятью говорится, что тот, кто выделяет (или сохраняет) объект, должен также освободить его, когда ему больше не нужен доступ к этому объекту. Поэтому autorelease позволяет методу возвращать вновь созданный объект и говорить, что он больше не нужен. Звонящий должен был бы сохранить его, если ему нужно, чтобы он оставался рядом. Если этого не произойдет, он просто автоматически отключится после того, как вызывающий абонент выйдет из области видимости.