Объявлять свойства в интерфейсе .h или в расширении в файле .m?
В Objective-C лучше всего:
-
Объявлять объекты, такие как кнопки в .h, а затем синтезировать в .m
.h
@interface SomeViewController : UIViewController
@property (strong, nonatomic) UIButton *someButton;
@end
.m
@implementation SomeViewController
@synthesize someButton = _someButton;
@end
-
или объявить их как ivars в .m
@interface SomeViewController ()
@property (strong, nonatomic) UIButton *someButton;
@end
Я замечаю, что во многих кодеках Apple, в частности, в их примере кода Breadcrumbs, многие из их свойств объявлены в интерфейсе. Есть ли разница между этими двумя? Я также заметил, что когда свойства объявлены в @interface
, они автоматически синтезируются с помощью символа подчеркивания, что делает синтез someButton = _someButton
бесполезным.
Ответы
Ответ 1
Во-первых, с Xcode 4.4 больше не нужно @synthesize
(если вы не измените метод setter и getter), либо когда @property
объявлен в @interface
или @implementation
.
Если @property
доступен только из класса, тогда объявите @property
в расширение класса в файле .m. Это обеспечивает инкапсуляцию и позволяет легко видеть, что @property
не используется из другого класса.
Если @property
используется другими классами, по дизайну, определите его в @interface
в файле .h.