在基于iOs页面的应用程序模板中,有两种不同的方式用于声明实例变量:
一个在.h(DataViewController.h)中声明为:
@interface DataViewController : UIViewController
@property (strong, nonatomic) id dataObject;
另一个在.m中定义为:
@interface ModelController()
@property (readonly, strong, nonatomic) NSArray *pageData;
@end
是否存在任何差异/优势,或者它只是一些旧的和一些新的语法?
答案 0 :(得分:2)
将您的属性放在.m文件中会使它们成为半私有属性。这被称为匿名类别或类扩展。
通过这样做,您在.m文件中定义的接口只能(轻松)在.m文件的范围内可见。
目标C内省意味着没有什么是真正私密的。
我倾向于不使用类扩展,因为它们对子类也不可见。我根据需要使用@private或@protected,并假设我的类的用户不会破坏我定义的合同。如果他们这样做,他们自己承担风险。