0

我有一个具有宽度和高度属性的 Rectangle 类。它还有一个名为origin (-(XYPoint *) origin ) 的实例属性/对象。下面是我指定初始化程序的代码,其中我将 XYPoint 对象作为参数传递。如果我将 XYPoint 类的属性作为此方法中的参数,然后初始化 XYPoint 对象并在方法内为其分配内存,有没有办法(或者可以)?否则,我必须在我的主程序中创建一个 XYPoint 对象并将其作为参数传递,这需要输入更多代码。

-(id) initWithWidth:(int)w andHeight:(int)h andOrigin:(XYPoint *)o
{
    self = [super init];
    if (self) {
        [self setWidth: w andHeight: h];
        self.origin = o;
    }
    return self;
}

PS-我是编程和Objective C的新手,所以如果我在我的问题中陈述了技术上的错误,请原谅我。谢谢!

4

1 回答 1

0

就个人而言——我尽量避免使用带参数的初始化程序。我认为这会导致编写更多代码和不灵活。我只为两件事使用指定的初始化程序:

  • 使用在对象初始化后不得更改的属性初始化对象
  • 用构造它绝对需要的属性初始化一个对象,以后不能指定

一般来说,对于 Rectangle 类,我会这样使用:

Rectangle * r = [ [ Rectangle alloc ] init ] ;
r.x = x ;
r.y = y ;
r.origin = o ;

// use r

并且除了上面列出的条件外,根本不使用指定的初始化模式。(例如,创建不可变的 Rectangle 实例)

最后,可能不需要创建一个 Rectangle 类——只需使用 CGRect/NSRect 原始结构。

于 2012-08-02T23:29:47.370 回答