Для многих объектов вы можете напрямую использовать метод, который возвращает автоматически выпущенный экземпляр. В качестве примера я обычно пишу эквивалент вашего фрагмента кода следующим образом:
thing.number = [NSNumber numberWithInt: 1];
Обратите внимание, что, поскольку ваше свойство сохраняет NSNumber, вам нужно будет разблокировать его позже, когда вы закончите со свойством.
В любом случае, если это не применимо, поскольку у вас нет конструкторов, возвращающих автоматически выпущенные объекты, ваш шаблон 1 определенно верен.
Вместо этого шаблон 2 кажется мне неправильным по следующей причине: сначала вы присваиваете NSNumber своей собственности, а затем освобождаете свою собственность. Однако вам необходимо освободить выделенный вами NSNumber, а не тот, который был сохранен вашей собственностью (вы сделаете это позже, еще раз, когда закончите со своей собственностью). Чистым эффектом шаблона 2 должна быть утечка памяти (выделенный номер NSN не освобождается) и ваше свойство не содержит номер NSN (потому что вы сначала сохранили его, а затем освободили).