(я хочу получить путь, чтобы я мог загрузить изображения в NSImageView)
Вам не нужен путь к вашему исполняемому файлу, чтобы сделать это. Самый простой способ - метод NSImage imageNamed:
; второе самое простое - это то, что предложил St3fan.
Теперь давайте рассмотрим проблемы в вашей реализации трудного пути:
NSString * _Ruta_APP = [[NSString alloc] init];
Это объявляет локальную переменную с именем _Ruta_APP
и инициализирует ее для хранения объекта NSString, которым вы владеете, потому что вы создали его с помощью alloc
и не выпустили его.
_Ruta_APP = [[NSBundle mainBundle] bundlePath];
Это помещает другой строковый объект в ту же переменную, заменяя первый. Если вы не используете сборщик мусора, то этот первый объект все еще жив, и вы все еще являетесь его владельцем, даже если у вас больше нет способа отправлять ему сообщения. Таким образом, вы утекли его.
Если вы хотели иметь _Ruta_APP
в качестве переменной экземпляра, то обрежьте всю первую строку. Как правило, плохая идея хранить объекты, которые вам не принадлежат, в переменных вашего экземпляра, поэтому берите этот объект во владение; лучшим способом было бы сделать копию (после этого вы будете владеть копией) и поместить ее в переменную экземпляра. В противном случае, когда то, что владеет исходным объектом, освобождает его, объект умрет, но вы все равно будете его удерживать; Затем вы отправите сообщение мертвому объекту, что приведет к сбою вашего приложения. См. правила управления памятью .
Если вы хотели иметь _Ruta_APP
в качестве локальной переменной, а не в каких-либо других методах экземпляра, обрежьте переменную экземпляра.