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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With