0

UIView をサブクラス化し、正常に動作する独自の drawRect を提供しました。ただし、これらのメソッドをサブクラスに追加しました。

 - (id) alloc
 {
    NSLog(@"Alloc");
    return [super alloc];
 }

 - (id) init
 {
    NSLog(@"Init");
    if (self = [super init])
        flashWhite = true;
    return self;
 }

サブクラスのオブジェクトが作成されるたびに (Interface Builder を介して発生する)、alloc メソッドと init メソッドが呼び出されると思いました。ただし、オブジェクトは作成されますが、init と alloc が呼び出されません。これは、適切な初期化を保証するために発生するべきではありませんか?

また、ビルドすると、UIView が「alloc」に応答しない可能性があるという警告が生成されます。これを NSObject から継承する必要はありませんか、または UIView を適切に作成するにはどうすればよいでしょうか?

上記の私の目的は、サブクラス化されたビューが、IB によって作成された後にカスタム初期化を実行できるようにすることでした。

4

3 に答える 3

1

initの指定された初期化子ではありませんUIViewinitWithFrame:は。をオーバーライドinitWithFrame:すると、呼び出されるはずですが、initによって呼び出されることはありませんUIView

于 2010-11-09T18:07:32.450 に答える
1

おっしゃる通りalloc、クラスメソッドです。UIViewinitWithFrame:は初期化に使用するため、それをオーバーライドすることを検討してください。

于 2010-11-09T18:09:42.280 に答える
0

Apple は通常、次のように init オーバーライドを作成します。

-(id)init{
   self = [super init];
    if (self) {
          //Custom Initialization goes here
     }
}

上記のコメント者は正しいですが。initwithFrame:指定されたイニシャライザですが、質問をフォーマットしたときにオーバーライドすると、問題に対するコンパイラの警告が表示されます。

于 2011-09-20T01:25:48.273 に答える