2

在我的 Objective-C 应用程序中,我有一个NSObject构成模型的子类层次结构。这些对象本身没有功能,即它们只有属性并且它们的唯一目的是保存数据。此外,我有一个控制器来管理此层次结构(树)的实例。

只有该控制器才被允许对树进行更改(例如树中对象的属性)。程序的其他部分应具有对(整个)树的只读访问权限。

完成此类访问管理的最简单方法是什么?

4

1 回答 1

3

这是朋友班的经典案例。虽然 ObjC 没有对友元类的语言支持,但创建它们并不难。

首先,模型的公共接口应该声明属性readonly。那部分应该是显而易见的。

然后在模型内部,您可以根据需要在类扩展中使您的属性可读写。(如果你习惯了 ObjC,这也应该很明显;如果不明显,我会更新答案。)

现在剩下的故事。创建一个“朋友”类别(或“作家”或“受保护”或任何对您有意义的名称)。

@interface ModelObject (Friend)
- (void)setSomeProperty:(id)someProperty;
@end

这只是告诉任何导入此类别的人setSomeProperty:存在。现在您的控件将导入此文件 ( ModelObject+Friend.h) 并能够设置属性。其他人都导入ModelObject.h并且该属性看起来是只读的。

这适用于您需要访问的任何内容,当然不仅仅是属性。我经常创建不可变的类,然后创建一个“仅限朋友”的initWithX:andY:andZ:方法。

于 2012-09-27T14:47:27.960 回答