Declare properties in .h interface or in an extension in .m file?

馋奶兔 提交于 2019-11-29 03:18:15

问题


In Objective-C, is it best practice to:

  1. Declare objects such as buttons in the .h and then synthesize in the .m

    .h
    @interface SomeViewController : UIViewController  
      @property (strong, nonatomic) UIButton *someButton;  
    @end
    
    .m
    @implementation SomeViewController  
      @synthesize someButton = _someButton;  
    @end
    
  2. or declare them as ivars in the .m

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

I notice that in a lot of Apple code, specifically their Breadcrumbs sample code, many of their properties are declared in the interface. Is there a difference between the two? I also noticed that when properties are declared in the @interface, they are automatically synthesized with an underscore prefix, making the someButton = _someButton synthesis useless.


回答1:


First, as of Xcode 4.4 there is no longer a need to @synthesize(unless you change both the setter and getter method), either when the @property is declared in the @interface or @implementation.

If the @property is only accessed from within the class then declare the @property in a class extension in the .m file. This provides encapsulation and make it easy to see that the @property is not used from another class.

If the @property is used by other classes, by design, then define it in the @interface in the .h file.



来源:https://stackoverflow.com/questions/14132129/declare-properties-in-h-interface-or-in-an-extension-in-m-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!