Объявить свойства в интерфейсе .h или в расширении в файле .m?

В Objective-C лучше всего:

  1. Объявляйте такие объекты, как кнопки, в .h, а затем синтезируйте в .m

    .h
    @interface SomeViewController : UIViewController  
      @property (strong, nonatomic) UIButton *someButton;  
    @end
    
    .m
    @implementation SomeViewController  
      @synthesize someButton = _someButton;  
    @end
    
  2. или объявить их как ivars в .m

    @interface SomeViewController ()  
      @property (strong, nonatomic) UIButton *someButton;  
    @end  
    

Я заметил, что во многих кодах Apple, особенно в их примере кода Breadcrumbs, многие свойства объявлены в интерфейсе. Есть ли разница между ними? Я также заметил, что когда свойства объявляются в @interface, они автоматически синтезируются с префиксом подчеркивания, что делает синтез someButton = _someButton бесполезным.


person HighFlyingFantasy    schedule 03.01.2013    source источник
comment
Оба этих объявления являются объявлениями свойств. Ивар создается @synthesize. Они функционируют одинаково; разница заключается в их видимости для других файлов.   -  person jscs    schedule 03.01.2013


Ответы (1)


Во-первых, начиная с Xcode 4.4 больше нет необходимо @synthesize (если вы не измените как метод установки, так и метод получения), либо когда @property объявлено в @interface или @implementation.

Если доступ к @property осуществляется только из класса, объявите @property в расширение класса в файле .m. Это обеспечивает инкапсуляцию и позволяет легко увидеть, что @property не используется из другого класса.

Если @property используется другими классами по дизайну, определите его в @interface в файле .h.

person zaph    schedule 03.01.2013
comment
Я хотел бы прокомментировать, что теперь редко нужно использовать @synthesize. (В некоторых случаях, таких как свойства только для чтения или свойства в подклассах Core Data, на самом деле все еще необходимо использовать @synthesize, поскольку Xcode все еще не очень хорошо их понимает.) - person JRG-Developer; 03.01.2013
comment
Я полностью согласен с @JRG-Developer. - person zaph; 03.01.2013
comment
Вот подробное обсуждение: Автоматический Синтез свойств с помощью Xcode 4.4 - person Basil Bourque; 01.12.2013
comment
@Basil Я проверяю Use Your Loaf каждую неделю, отличный материал! Спасибо за ссылку. - person zaph; 01.12.2013