问题
In Objective-C, is it best practice to:
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
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