【发布时间】:2015-04-28 05:25:55
【问题描述】:
考虑这个构造函数的例子:
+ (instancetype)widgetWithTitle:(NSString *)title
{
Widget* widget = [[self alloc] init];
widget.title = title;
return widget;
}
假设我想动态推断类型,因此当使用此构造函数调用我的子类时,它们返回 WidgetSubclass* 而不是 Widget*。
我对@987654324@ 的期望会引发编译器警告。那么我怎样才能让编译器创建一个指向正在调用的任何类型的指针,而不是这个硬编码的超类类型呢?
请注意,我意识到我可以创建一个initWithTitle: 方法并返回[[self alloc] initWithTitle:title],这不是重点。
另请注意,我意识到这实际上不会妨碍子类中的任何操作设置——这只是为了理想。
-- 编辑--
我应该澄清我的意图,因为这个问题没有受到热烈欢迎。目标只是看看是否有一个编译时typeOf 机制我可以用来声明我当前上下文类型的对象(编译时相当于[self class])。想想instancetype objectOfMyOwnKind = ... 或typeOf(self) anObjectLikeMe = [self copy] 什么的。
这不一定是实际应用。纯属好奇。毫无疑问如何实现一个正确的构造函数,如果构造函数是一个红鲱鱼,我很抱歉。
【问题讨论】:
-
你的代码完全没问题。
-
你了解什么是继承吗? (没有必要做你想做的事。)
-
阅读说明。是的,代码很好!是的,我理解继承!这种模式有效并且对我的代码的执行没有任何影响。我只是想知道生成当前类类型的类的机制(即,如果有一个用于强引用的 typeOf() 方法,就像对于 weakSelf 模式那样)。我已经使用 Objective-C 很多年了,只是为了满足今天出现的一些切向的好奇心。
-
“那么我怎样才能让编译器创建一个指向正在调用的任何类型的指针,而不是这个硬编码的超类类型呢?”这确实创建被调用的任何类型。这个不是为超类硬编码的。
-
您的澄清毫无意义。您无法在编译时完成运行时工作。
标签: objective-c factory-pattern instancetype