我有一个 Matrix
类,我'd like to subclass. Let'调用我的子类 Column
. 我喜欢重复代码,所以我在子类中创建了一个工厂方法,在初始化对象时调用它的超类'工厂方法 .
问题是,如果我创建一个 Column
类的实例,并调用仅在 Column
中找到的属性,我会收到一个错误,因为我的 Column
类'调用我的 Matrix
类'工厂方法的工厂方法返回一个类型为 Matrix
的实例而不是 Column
或任何子类调用它 . 我明白为什么会这样,但我不知道如何解决这个问题 .
我已经在工厂方法上阅读了以下article,并且知道不应该使用 [[Matrix alloc] init];
而应该使用 [[self alloc] init];
. 问题是我'm not sure how I' d访问我的实例变量,如 matrix
, rows
和 freeData
,我在我的 Headers 中定义如下:
@interface Matrix : NSObject <NSCoding, NSCopying> {
@public double *matrix;
@public int rows;
@public int columns;
@private BOOL freeUpData;
}
这是我需要帮助的工厂方法 . 如何重写它以便它可以访问我的实例变量,并且还可以使用子类化(并且不仅返回 Matrix
实例) .
+ (instancetype)matrixFromArray:(double *)arr Rows:(int)m Columns:(int)n Mode:(refMode)mode
{
Matrix *mt = [[Matrix alloc] init];
if (mode == YCMCopy) {
double *new_m = malloc(m*n*sizeof(double));
memcpy(new_m, arr, m*n*sizeof(double));
mt->matrix = new_m;
mt->freeData = YES;
}
else {
mt->matrix = arr;
mt->freeData = NO;
}
if (mode != YCMWeak) {
mt->freeData = YES;
}
mt->rows = m;
mt->columns = n;
return mt;
}
1 回答
您始终创建Matrix实例,但您需要创建当前类的实例
如果你这样做
[Matrix matrix]将返回Matrix对象
[Column matrix]将返回Column对象