我可以使用NSMutableArray / NSArray作为工厂方法的返回类型而不是实例类型吗?

时间:2019-05-09 13:56:19

标签: class nsarray factory instancetype

我有一个NSObject的子类,称为Pump。目前,它具有6个属性,可用于创建Pump-uint8_t speed, double animateTime, float angle, bool operating, uint8_t direction, bool reactivate的实例。

我的项目涉及通过Bluetooth PSoC 4模块和我的iPhone控制5个步进电机。每个步进器都独立于下一个步进器,因此我创建了5个Pump对象,并将每个实例返回到我的MotorViewController

创建5个对象之后,我将它们存储在NSArray中,以便在MotorViewController的其余部分中访问它们及其属性。

这是我当前的实例化过程:

// Pump.m

#import "Pump.h"

@implementation Pump

@synthesize speed, animateTime, angle;
@synthesize operating, direction, reactivate;

- (id)initPump:(uint8_t)spd time:(double)t
         angle:(float)ang operating:(bool)op
     direction:(uint8_t)dir reactivate:(bool)r
{
    self = [super init];
    if (self) {
        speed = spd;
        animateTime = t;
        angle = ang;
        operating = op;
        direction = dir;
        reactivate = r;
    }
    return self;
}

+ (instancetype)pump:(uint8_t)spd
{
    Pump *pump = [[Pump alloc] initPump:spd time:0 angle:M_PI
                              operating:false direction:0x00
                             reactivate:false];
    return pump;
}

@end


// MotorViewController.m

#import "MotorViewController.h"

@interface MotorViewController
@property (nonatomic, strong) NSArray *pumps;
@end

@implementation MotorViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // those speed values are for UISlider objects
    self.pumps = @[[Pump pump:(uint8_t)self.salineSlide.value],
                   [Pump pump:(uint8_t)self.sampleSlide.value],
                   [Pump pump:(uint8_t)self.airSlide.value],
                   [Pump pump:(uint8_t)self.wasteSlide.value],
                   [Pump pump:(uint8_t)self.lowlossSlide.value]];

}

我想把那个NSArray *pumps放在我的Pump模型中。

是否可以使我的主要工厂方法的返回类型为NSArray甚至是NSMutableArray?仍然保留pump:方法,但在完成所有操作后,返回数组。

这甚至被认为是好的设计吗?感谢所有输入。

编辑 解?一种一次性的方案(从MotorViewController开始,我调用pump:并创建一个包含所有5个Pump对象的数组)

pumpsNSMutableArray属性

@synthesize pumpsArray;

+ (NSMutableArray*)pump:(uint8_t)spd
{
    for (int i = 0; i < 5; i++ {
        Pump *pump = [[Pump alloc] initPump:spd time:0 angle:M_PI
                                  operating:false direction:0x00
                                 reactivate:false];
        [pumpsArray addObject:pump];
    }
    return pumpsArray;
}

0 个答案:

没有答案