1

我创建了一个以这种方式定义的指定初始化程序的类:

-(id)initWithFrame:(CGRect)frame 
          aProperty:(float)value {

    self = [super initWithFrame:frame];

    if(self){   
        ///....do something 
    }
}

现在我想知道如何避免直接调用 initWithFrame 方法,例如:

MyClass *theObj = [MyClass alloc]initWithFrame:theFrame];

我想过在 initWithFrame 定义中抛出异常:

- (id)initWithFrame:(CGRect)frame
{
    @throw ([NSException exceptionWithName:@"InitError" 
                                    reason:@"This class needs to be initialized with initWithFrame:aProperty: method" 
                                  userInfo:nil]);
}

这是一个好的解决方案吗?

4

2 回答 2

4

使用默认值调用指定的初始化程序怎么样aProperty

于 2012-05-04T08:46:11.713 回答
1

我在初始化器中使用的两种技术。我敢肯定还有更多。

技术1:

在 initWithFrame 中,使用属性的默认值调用您的初始化程序

- (id)initWithFrame:(CGRect)frame
{
    return [self initWithFrame:frame aProperty:1.0f];
}

技术2:

只需返回零;

- (id)initWithFrame:(CGRect)frame
{
    return nil;
}
于 2012-05-04T08:49:09.250 回答