13

在 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  
    

我注意到在很多 Apple 代码中,特别是他们的 Breadcrumbs 示例代码,他们的许多属性都在接口中声明。两者有区别吗?我还注意到,当在 中声明属性时@interface,它们会自动合成并带有下划线前缀,从而使someButton = _someButton合成无用。

4

1 回答 1

31

首先,从 Xcode 4.4开始,不再需要@synthesize(除非您同时更改 setter 和 getter 方法),无论@property是在@interfaceor中声明@implementation.

如果@property只能从类中访问,则在 .m 文件@property类扩展中声明 。这提供了封装,并且很容易看出@property没有从另一个类中使用。

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

于 2013-01-03T02:08:31.877 回答