Цель-C: Объявление кнопки UIB - PullRequest
1 голос
/ 08 сентября 2011

Если я хочу объявить простую кнопку, я должен сделать обе из следующих вещей?

Внутри @interface:

UIButton *button;

и

@property (nonatomic, retain) IBOutlet UIButton *button;

Является ли декларация свойства достаточной или необходимы оба? Если так, то почему?

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Первая часть в @interface - это объявление ivar. Вам больше не нужно делать это, если вы объявляете собственность. На самом деле, это хорошая идея прекратить это делать, потому что это частная деталь реализации, которую вы раскрываете в своем заголовке.

Вторая часть - это объявление свойства. Это все, что вам действительно нужно. Однако, если вы объявляете свойство, вам также необходимо синтезировать методы доступа. В своем файле .m в верхней части блока @implementation просто вставьте

@synthesize button;

@synthesize сообщает свойству, какой ivar использовать для своего резервного хранилища. А в современных средах исполнения (то есть iOS и 64-битной OS X) он также синтезирует ивар для вас. Поэтому я думаю, что если вы пишете 32-битный код OS X, вам все равно нужно объявление ivar, но это единственный раз.

0 голосов
/ 08 сентября 2011

Парни из Apple удалили такую ​​избыточность, добавив функцию (не хрупкая abi blablabla) в clang.Вы можете написать @property и @synthesize без ивара внутри @interface ClassName {}.

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