1

我的应用程序中有几个 viewController,我想从单个父 viewController 继承,当然,它扩展了 UIViewController(从而使所有 viewController 类,除了父类,兄弟类)。我想知道(而且我是 Objective-C 中的继承新手),在我的父 viewController 类中,我在 .h 文件中声明了一个名为 NSString *name 的参数,我将其标记为@property(非原子,保留),然后在我的 .m 文件中合成。

在父类中执行此操作后,我是否可以访问子 viewControllers 中的 NSString *name 参数,还是必须在从父类继承的每个 viewController 类中声明一个单独的参数?每个 viewController 的 NSString *name 参数都有一个唯一值,如果是这种情况,我是否需要为每个 viewController 类创建一个单独的参数,或者我只需在父类中创建一次就足够了?

我还想确认,如果我在父类中声明任何方法,我将能够使用来自子类的引用来访问它们(只要该方法没有在子类中被覆盖),就像我一样能用Java吗?我的猜测是肯定的,因为这是 Objective-C 的基本原则之一。

4

1 回答 1

0

如果每个视图控制器都有一个唯一的值,并且该值是不可变的,那么您可以简单地覆盖您的name属性的 getter 并返回该视图控制器的唯一值:

- (NSString *)name {
    return @"The name of this view controller";
}

如果您希望能够改变结果,您可以声明 iVar 或具有不同名称的属性,然后在类的 getter 中返回它:

- (NSString *)name {
    return _myNameiVar;
}

另外,要回答您的第二个问题,在类的方法文件中声明的变量、方法甚至属性对子类是不可见的,其中在标题中声明的方法和属性对所有导入标题的人都是可见的。iVar 始终可以通过 struct 访问运算符 ( ->) 访问,但除非它们被标记为@public,否则编译器会阻止您走这条路。

于 2012-12-16T03:18:59.037 回答