Время жизни слабых локальных переменных с ARC

Если у меня есть кусок кода, который выглядит следующим образом:

- (void)testSomething
{
  __weak NSString *str = [[NSString alloc] initWithFormat:@"%@", [NSDate date]];
  NSLog(@"%@", str);
}

вывод будет (нулевой), потому что нет сильных ссылок на str, и он будет немедленно освобожден после того, как я его выделю. Это имеет смысл и изложено в руководстве «Переход к ARC».

Если мой код выглядит так:

- (void)testSomething
{
  __weak NSString *str = [NSString stringWithFormat:@"%@", [NSDate date]];
  NSLog(@"%@", str);
}

тогда он правильно печатает текущую дату. Очевидно, вы ожидаете, что он будет работать в мире, не относящемся к АРК, так какstr будет автоматически освобожден и, следовательно, действителен до выхода из этого метода. Однако в коде с поддержкой ARC люди обычно рассматривают две формы (stringWithFormat & alloc/initWithFormat) быть эквивалентным.

Поэтому мой вопрос: гарантированно ли работает код, подобный второму, в ARC? То есть, если у меня есть слабая ссылка на объект, который я получаю через то, что мы обычно рассматриваем как удобный конструктор автоматического освобождения,гарантированный чтобы можно было безопасно использовать эту ссылку в той же области, которую я обычно имел бы без ARC (то есть, пока метод не завершился)?

Ответы на вопрос(2)

Ваш ответ на вопрос