【发布时间】:2013-04-24 03:15:30
【问题描述】:
我发现很难相信没有straightforward 方法可以让类在 .m 文件中声明其受保护的属性(以避免使用只有子类需要知道的变量污染 .h 文件)..
用代码表示,我想完成这样的事情:
// SuperClass.h
NOTHING!
// SuperClass.m
@interface SuperClass
@property (nonatomic, retain) variable;
@end
// SubClass.m
// do something with variable
更新:这种情况发生在 UIGestureRecognizer.. 见subclassing notes:
你可以创建一个 UIGestureRecognizer 的子类来识别 独特的手势——例如,“复选标记”手势。如果你是 要创建这样一个具体的手势识别器,一定要导入 UIGestureRecognizerSubclass.h 头文件。此标头声明 子类必须覆盖、调用的所有方法和属性, 或重置。
来自Carl Veazey:基本上这个想法是子类应该知道的所有属性/方法都封装在一个单独的.h文件中。我想这会以不同的方式解决污染问题。
【问题讨论】:
-
您的派生类究竟如何知道
m文件中的内容?.h和.m文件的整个想法是提供一个定义,然后提供一个隐藏的实现。 -
我想我明白你在说什么......所以假设 x 公司正在销售一段代码,他们只显示 .h 文件并隐藏其他所有内容......这段代码的消费者会必须知道他们可以继承哪些变量/方法..
-
@Moo-Juice 请查看问题更新
-
我真的不明白为什么您将头文件中的受保护/公共定义视为污染。对于 C、Objective-C 和 C++ 来说就是这样。是的,第 3 方库(您没有获得源代码的地方)通常是一个 dll/.so(已编译)以及头文件。
标签: objective-c oop inheritance superclass