Правило гласит, что вам нужно сохранить, только если вам понадобится использовать объект позже.
Оно не говорит, что если вы не сохраните правильно, оно обязательно рухнет.*
Чаще всего неправильное сохранение рано или поздно приводит к краху.Но ваш код является исключением, потому что строка, которую вы использовали, была просто постоянной строкой, известной во время компиляции.
Что происходит, так это.Предположим, вы выполняете следующую операцию:
NSString* s=@"foo";
NSString* ss=[[NSString alloc] initWithString:@"foo"];
Это фактически делает ss
равным s
.В качестве оптимизации среда выполнения Какао не создает отдельный экземпляр NSString
.И этот объект s
- это время компиляции NSString
, которое эффективно ведет себя как бесконечно сохраняемый объект.
Вот почему ваш код не вылетал.Тем не менее, Apple может изменить реализацию среды выполнения Какао в следующей версии ОС, чтобы ваш код не работал.
Дело в том, что вы должны следовать правилу.Если вы следуете правилу, оно не будет зависать даже в будущей версии ОС.Если этого не произойдет, это может не привести к сбою сразу, но в конечном итоге это будет.