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

イニシャライザで使用する 2 つの手法。私はもっ​​とあると確信しています。

テクニック 1:

initWithFrame で、プロパティのデフォルト値を使用してイニシャライザを呼び出します

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

テクニック 2:

単純に nil を返します。

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