Переписывание кода для избавления от @property в target-c ARC - PullRequest
0 голосов
/ 14 февраля 2012

до ARC я писал переменную в заголовке без использования свойства:

@interface MyViewController : UIViewController {
  NSString *prop1;
}
@end

, затем в файле .m, который я использовал для сохранения / выпуска:

-(void)initVar {
  prop = @"initialized variable";
  [prop retain];
}

-(void)dealloc{
  [prop release];
}

После попыткиНа какое-то время ARC у меня возникает много проблем с управлением памятью, в том смысле, что многие объекты были освобождены.Я нашел самое быстрое (но грязное) решение, переместив ivar в @property и используя точечную нотацию.

@interface MyViewController : UIViewController

@property(strong) NSString *prop;

@end  

Позже я добавил атрибут только для чтения, так как не было доступа вне контроллера.Мой вопрос в том, как в среде ARC переписать приведенный выше код, чтобы избавиться от @property, в частности, меня беспокоит вопрос о контроллерах представления, они могут получать alloc / dealloc много раз в течение жизни приложения.

1 Ответ

2 голосов
/ 14 февраля 2012

Честно говоря, ваш вопрос и ваш псевдокод не имеют особого смысла. В ARC, ивар будет сильной ссылкой на объект [по умолчанию], и, таким образом, назначения в / из этого ивара будут управляться так же, как и все другие объекты с поддержкой ARC. Если вы компилируете без ARC, это не так.

Вопрос о том, используете ли вы ivars или свойства для своего кода, является вопросом стиля и имеет мало общего с управлением памятью [в ARC - в MRR вам потребуется вручную управлять ссылками ivar].

Ваш пример инициализатора и ваш -dealloc неверны в вашем вопросе, но это может быть просто потому, что это были быстрые заметки, а не реальный код.

Если у вас были проблемы с управлением памятью в ARC, похоже, что-то пошло не так. Вы пробовали строить и анализировать? Вы уверены, что включили ARC для всех файлов?

(Обратите внимание, я уже давно использую ARC, и это, как правило, просто "работает"). Мне еще не приходилось сталкиваться с серьезными проблемами, за исключением пары ошибок компилятора и хрупкой границы между ними. Код NS и CF).

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