在.h接口或.m文件的扩展名中声明属性?

时间:2013-01-03 02:04:47

标签: objective-c coding-style declared-property

在Objective-C中,最佳做法是:

  1. 在.h中声明诸如按钮之类的对象,然后在.m

    中进行合成
    .h
    @interface SomeViewController : UIViewController  
      @property (strong, nonatomic) UIButton *someButton;  
    @end
    
    .m
    @implementation SomeViewController  
      @synthesize someButton = _someButton;  
    @end
    
  2. 或在.m

    中将它们声明为ivars
    @interface SomeViewController ()  
      @property (strong, nonatomic) UIButton *someButton;  
    @end  
    
  3. 我注意到在许多Apple代码中,特别是他们的Breadcrumbs示例代码,他们的许多属性都在界面中声明。这两者有区别吗?我还注意到,当在@interface中声明属性时,它们会自动用下划线前缀合成,使someButton = _someButton综合无效。

1 个答案:

答案 0 :(得分:32)

首先,as of Xcode 4.4不再需要@synthesize(除非您同时更改了setter和getter方法),或者@property@interface中声明}或@implementation

如果仅从类中访问@property,则在.m文件中的class extension中声明@property。这提供了封装,并且很容易看到@property未被其他类使用。

如果其他类按照设计使用@property,则在.h文件的@interface中定义它。