Подтвердить что ты не робот

Объявлять свойства в интерфейсе .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 бесполезным.

4b9b3361

Ответ 1

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

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

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