предупреждение по nsbundle bundlepath - PullRequest
1 голос
/ 03 февраля 2010

Я хочу получить исполняемый путь моего пакета. (Я хочу получить путь, чтобы я мог загрузить изображения в NSImageView)

Я получил это.

NSString * _Ruta_APP = [[NSString alloc] init];
_Ruta_APP = [[NSBundle mainBundle] bundlePath];

но компилятор говорит /ControlAPP.m:33:0 /ControlAPP.m:33: предупреждение: локальное объявление _Ruta_APP скрывает переменную экземпляра

но я не могу использовать значение _Ruta_APP

У кого-нибудь есть идея?

Ответы [ 4 ]

1 голос
/ 03 февраля 2010

Если вы действительно хотите сохранить путь в переменной экземпляра, просто убейте первую строку.

  1. Вам не нужно объявлять переменную экземпляра в методе.
  2. Вам не нужно инициализировать переменную пустой строкой, прежде чем назначать другую строку.
  3. Затем следует сохранить объект переменных экземпляра:

[_Ruta_APP autorelease];<br> _Ruta_APP = [[[NSBundle mainBundle] bundlePath] copy];

1 голос
/ 03 февраля 2010

Пара вещей:

Попробуйте вместо этого:

NSString* imagePath = [[NSBundle mainBundle] pathForResource @"SomeImage" ofType: @"png"]

Полученное предупреждение указывает на то, что у вас также есть переменная экземпляра с тем же именем, что и у этой локальной переменнойв вашем фрагменте кода.

Переменные экземпляра с подчеркиванием, вероятно, также являются плохой идеей, поскольку именно это Apple использует для скрытых / частных иваров.Я думаю, что использовать их в своем коде считается плохим стилем.

0 голосов
/ 03 февраля 2010

(я хочу получить путь, чтобы я мог загрузить изображения в NSImageView)

Вам не нужен путь к вашему исполняемому файлу, чтобы сделать это. Самый простой способ - метод NSImage imageNamed: ; второе самое простое - это то, что предложил St3fan.

Теперь давайте рассмотрим проблемы в вашей реализации трудного пути:

NSString * _Ruta_APP = [[NSString alloc] init];

Это объявляет локальную переменную с именем _Ruta_APP и инициализирует ее для хранения объекта NSString, которым вы владеете, потому что вы создали его с помощью alloc и не выпустили его.

_Ruta_APP = [[NSBundle mainBundle] bundlePath];

Это помещает другой строковый объект в ту же переменную, заменяя первый. Если вы не используете сборщик мусора, то этот первый объект все еще жив, и вы все еще являетесь его владельцем, даже если у вас больше нет способа отправлять ему сообщения. Таким образом, вы утекли его.

Если вы хотели иметь _Ruta_APP в качестве переменной экземпляра, то обрежьте всю первую строку. Как правило, плохая идея хранить объекты, которые вам не принадлежат, в переменных вашего экземпляра, поэтому берите этот объект во владение; лучшим способом было бы сделать копию (после этого вы будете владеть копией) и поместить ее в переменную экземпляра. В противном случае, когда то, что владеет исходным объектом, освобождает его, объект умрет, но вы все равно будете его удерживать; Затем вы отправите сообщение мертвому объекту, что приведет к сбою вашего приложения. См. правила управления памятью .

Если вы хотели иметь _Ruta_APP в качестве локальной переменной, а не в каких-либо других методах экземпляра, обрежьте переменную экземпляра.

0 голосов
/ 03 февраля 2010
  1. Похоже, у вас есть переменная с именем _Ruta_APP, а также переменная экземпляра с тем же именем. Если вы хотите использовать переменную экземпляра, вам не нужно переопределять переменную внутри метода.

  2. Первая строка в вашем фрагменте кода создает объект, который вы никогда не используете и который протекает.

Так что я бы сказал, просто удалите первую строку из своего фрагмента, и предупреждение должно исчезнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...