私は非常に愚かだと感じていますが... CocoaTouch UIクラスから派生したカスタムタイプでインスタンス変数を初期化する正しい方法は何ですか?
から派生したタイプがUIViewController
あるとしましょうTRUIController
。私はivarを次のように定義しました:
@implementation TRUIController
{
NSNumberFormatter *_numberFormatter;
}
@end
_numberFormatter
また、初期化コードを、などのUIメソッドの前に実行する場合は、どこに配置する必要がありviewDidLoad
ますか?
他の言語では、ivarを作成しconstructor
、呼び出してから初期化します。しかし、それは単にでは機能しbase
constructor
ません。objective-c
Cocoa Touch
上記の場合、
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibBundleOrNil bundle:nibBundleOrNil];
if(self)
{
//init ivars
}
return self;
}
それは機能しません、私は他のinitWithBlaBla
方法を試してみて、最後にinit
、実際に呼ばれている、その場合は-を見つけます-initWithCoder:
ここで、UITableViewCellから派生したクラスがあるとしましょう。繰り返しますが、NSNumberFormatter
ivarを初期化する必要があります。ivarをオーバーライドinit:
、呼び出し、初期化できないのはなぜですか?super
すべてのタイプに単一の共通の初期化メソッドを持たないというこの奇妙な設計決定の背後にある考え方は何ですか?
派生型でivarを初期化する唯一の方法ですか?今回オーバーライドする方法を見つけるために、毎回調査を行いますか?
私は何かを逃したことがありますか?それは非常に愚か/直感的でない/エラーが発生しやすいと感じるからです