Во-первых, крайне странно создавать пользовательский интерфейс без простого использования Interface Builder. Это можно сделать, и для этого есть несколько причин, но их довольно мало и они далеко друг от друга.
Далее, сам по себе этот код недостаточно, чтобы сказать, что пошло не так. Создание пользовательского интерфейса программно порождает целый ряд вопросов; или нет? ... как настроен ваш цикл выполнения? ... у вас есть правильно настроенная оболочка приложения?
Как сказал Абизем, наиболее очевидным предположением будет то, что у вас включен GC, и вы не внедрили окно в какую-то глобальную переменную где-либо, прямо или косвенно. Он «просто работает» в стандартном приложении Какао, потому что экземпляры NSWindow внедряются через инфраструктуру приложения Какао (в частности, меню Windows).