iOS:如何使工厂方法与子类化一起工作
我有一个类型为iOS:如何使工厂方法与子类化一起工作,ios,objective-c,inheritance,initialization,subclassing,Ios,Objective C,Inheritance,Initialization,Subclassing,我有一个类型为Matrix的类,我想将其作为子类。让我们调用我的子类列。我还想给我的子类添加新属性。我喜欢工厂方法,不喜欢重复代码,所以我在我的子类中创建了一个工厂方法,在初始化对象时调用其超类的工厂方法 问题是,如果我创建了列类的一个实例,并调用了仅在列中找到的属性,我会得到一个错误,因为调用myMatrixclass”工厂方法的myColumnclass”工厂方法返回的是类型为Matrix的实例,而不是Column或任何子类调用它的实例。我理解为什么会发生这种情况,但我不知道如何解决 我已经
Matrix
的类,我想将其作为子类。让我们调用我的子类列
。我还想给我的子类添加新属性。我喜欢工厂方法,不喜欢重复代码,所以我在我的子类中创建了一个工厂方法,在初始化对象时调用其超类的工厂方法
问题是,如果我创建了列
类的一个实例,并调用了仅在列
中找到的属性,我会得到一个错误,因为调用myMatrix
class”工厂方法的myColumn
class”工厂方法返回的是类型为Matrix
的实例,而不是Column
或任何子类调用它的实例。我理解为什么会发生这种情况,但我不知道如何解决
我已经阅读了以下关于工厂方法的内容,并且知道不使用[[Matrix alloc]init]代码>我应该使用[[self alloc]init]代码>。问题是我不确定如何访问实例变量,如矩阵
、行
和自由数据
,我在标题中定义如下:
@interface Matrix : NSObject <NSCoding, NSCopying> {
@public double *matrix;
@public int rows;
@public int columns;
@private BOOL freeUpData;
}
您总是创建矩阵实例
但您需要创建当前类的实例
+ (instancetype)matrix
{
Matrix *mt = [[self alloc] init];
....
return mt;
}
如果你这么做了
[矩阵]将返回矩阵对象
[Column matrix]将返回Column对象不清楚您在问什么?子类不能返回超类实例,它只能返回子类,但由于Liskov替换原则,@Paulw11刚刚更新了我的答案,希望这能澄清我的问题。如果您将投票改为结束,我将不胜感激。你也错了。我的子类正在返回一个超类实例,因为我的超类工厂方法是如何编写的。我想知道如何更新它以使子类化成为可能。你不能从子类中获得这个超类工厂方法,因为你总是会得到超类——正如你所发现的那样。您可以更改工厂方法以将分配与初始化分离-然后您可以在子类中分配对象,然后调用[super doinitialization]
啊,我看您有没有机会给我举个例子?该死的,我爱你@oxigen。出于某种原因,我想得太多了,觉得Matrix*mt
需要像self-mt
,等等。
+ (instancetype)matrix
{
Matrix *mt = [[self alloc] init];
....
return mt;
}