このコード行が何をするのか誰か教えてもらえますか?
self.viewController = [[MainViewController alloc] init];
viewController はすでに CDVViewController オブジェクトなので、MainViewController で何をしているのかよくわかりません:S?
どんな助けでも素晴らしいでしょう
ありがとう
このコード行が何をするのか誰か教えてもらえますか?
self.viewController = [[MainViewController alloc] init];
viewController はすでに CDVViewController オブジェクトなので、MainViewController で何をしているのかよくわかりません:S?
どんな助けでも素晴らしいでしょう
ありがとう
最初に MainViewController* オブジェクトを作成して初期化し、それを [self setViewController: ] に割り当てます。self.viewController は実際には、単純なポインターの割り当てではなく、セルフ セッター メソッドの呼び出しです (viewController が ivar でない場合、viewController = [[MainViewController alloc] init] とは異なります)。
@property ステートメントでどのようにセッターを生成したかによって異なりますが、それが
@property(nonatomic, retain)*UIViewController viewController
次のフォームのように作成された生成されたセッター メソッドを無料で取得できます。
- (void)setViewController:(UIViewController*)controller{
if(viewController != controller){
[viewController autorelease];
viewController = [controller retain];
}
}
そのため、viewController が CDVViewController* オブジェクトであった場合、新しい CDVViewController* オブジェクトと交換されます。CDVViewController* がリリースされ、CDVViewController は保持され、viewController ivar に割り当てられます。
ちなみに、割り当てを行ったばかりの場合は、次のことを行う必要があります。
[viewController release]; // if it was before a CDVViewController
self.viewController = [[MainViewController alloc] init];
留保財産あり
self.viewController = [[[MainViewController alloc] init] autorelease]; // it will be retained in the setter, so you must free it
コードに応じて、リークを回避します。
この行は、クラス MainViewController のインスタンスである新しいオブジェクトを作成し、そのポインタを変数 viewController に格納するだけです。