Ну, в вашем тривиальном случае с использованием строкового литерала (хотя вы пренебрегли @
), у вас мало шансов ошибиться.
Однако для общего случая, когда вы инициализируете переменную экземпляра более динамичным способом с возможными побочными эффектами, нет, это не поточно-ориентированный. Два потока могут быть одновременно в геттере. Каждый из них может отправить задачу в очередь. Поскольку очередь является параллельной, и ни одна задача не была представлена в качестве барьера, обе задачи могут выполняться одновременно. Они оба могут проверить !_personName
и оба определят, что им нужно его инициализировать. Они будут выполнять избыточную работу, и, если у нее есть побочные эффекты, это может испортить ситуацию.
Также возможно, что компилятор и / или процессор могут изменить порядок действий. Один поток может подумать, что _personName
не является nil
и вернуть указатель, даже если другой поток все еще работает над инициализацией объекта. То есть присваивание _personName
может произойти до того, как все эффекты выражения в правой части присваивания завершатся и станут видимыми для другого потока.