在我的 Objective-C 应用程序中,我有一个构成模型的 NSObject 子类的层次结构。这些对象本身没有功能,即它们只有属性,它们的唯一目的是保存数据。此外,我有一个 Controller 来管理此层次结构(树)的实例。
只允许该 Controller 对树进行更改(例如树中对象的属性)。程序的其他部分应具有对(整个)树的只读访问权限。
完成此类访问管理的最简单方法是什么?
Best Answer-推荐答案 strong>
这是friend classes的经典案例.虽然 ObjC 不支持友元类的语言,但创建它们并不难。
首先,模型的公共(public)接口(interface)应该声明属性readonly 。那部分应该是显而易见的。
然后在模型内部,您可以根据需要在类扩展中使您的属性可读写。 (如果你习惯了 ObjC,这也应该很明显;如果不明显,我会更新答案。)
现在故事的其余部分。创建一个“ friend ”类别(或“作家”或“ protected ”或任何对您有意义的名称)。
@interface ModelObject (Friend)
- (void)setSomePropertyid)someProperty;
@end
这只是告诉任何导入此类别的人 setSomeProperty: 存在。现在您的控件将导入此文件 (ModelObject+Friend.h ) 并能够设置属性。其他人都导入 ModelObject.h 并且该属性看起来是只读的。
这适用于您需要访问的任何内容,当然不仅仅是属性。我经常创建不可变的类,然后创建一个“仅限 friend ”的 initWithX:andY:andZ: 方法。
关于objective-c - Objective-C中的只读层次模型,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/12623486/
|