Проблема с объектом NSMutableString, объявленным как extern - PullRequest
0 голосов
/ 28 апреля 2011

в моем приложении мне нужно передать NSMutableString из одного класса в другой, поэтому я поставил его extern. Проблема в том, что когда я запускаю приложение, класс получает доступ к строке только один раз, во второй раз, когда приложение аварийно завершает работу !! Очевидно, что NSMutablString становится нулевым после первого доступа. Поэтому я попытался что-то выяснить: я преобразовал строку в символ C. Что ж, на этот раз приложение не падает, но ... значение char меняется каждый раз, когда я его называю !! Я действительно смущен: Пожалуйста, мне нужно знать

  1. Есть ли способ сохранить значение NSMutablString, чтобы оно было доступно каждый раз, когда класс вызывает его?
  2. Что вызывает изменение значения символа?

Спасибо за любую помощь

1 Ответ

1 голос
/ 28 апреля 2011

Звучит так, будто вы делаете что-то странное, правда.

  • Если вы хотите передать экземпляр NSMutableString от одного объекта (источника) к другому (цели), вы должны либо присвоить его свойству целевого объекта, либо передать его с помощью вызова некоторого метода. *

  • Целевой объект должен сохранить этот экземпляр (либо явно, либо с помощью флага 'retain' свойства), чтобы гарантировать, что экземпляр действителен независимо от того, что делает исходный объект. Целевой объект также должен освобождать его, когда он больше не нужен, иначе вы бы допустили утечку памяти.

  • Не совсем очевидно, что «NSMutableString (pointer) становится nil». Любая неверная ссылка может привести к сбою при разыменовании, а не только в ноль. На самом деле, я предполагаю, что вы пытаетесь получить доступ к удаленному объекту.

  • Полагаю, вы использовали [NSMutableString cStringUsingEncoding:] или аналогичный метод для получения указателя на символ. Имейте в виду, что возвращаемый указатель действителен в течение ограниченного времени, проверьте документы.

В любом случае, это все довольно простые вещи. Вам следует прочитать Руководство по программированию управления памятью и убедиться, что вы все понимаете. Просто необходимо разработать стабильный код Objective-C.

...