目标C @property在.h文件中与@property在.m文件中

时间:2014-05-01 19:56:37

标签: ios objective-c

在基于iOs页面的应用程序模板中,有两种不同的方式用于声明实例变量:

一个在.h(DataViewController.h)中声明为:

@interface DataViewController : UIViewController
@property (strong, nonatomic) id dataObject;

另一个在.m中定义为:

@interface ModelController()
@property (readonly, strong, nonatomic) NSArray *pageData;
@end

是否存在任何差异/优势,或者它只是一些旧的和一些新的语法?

1 个答案:

答案 0 :(得分:2)

你的意思是@property?

将您的属性放在.m文件中会使它们成为半私有属性。这被称为匿名类别或类扩展。

通过这样做,您在.m文件中定义的接口只能(轻松)在.m文件的范围内可见。

目标C内省意味着没有什么是真正私密的。

我倾向于不使用类扩展,因为它们对子类也不可见。我根据需要使用@private或@protected,并假设我的类的用户不会破坏我定义的合同。如果他们这样做,他们自己承担风险。