0

このコード行が何をするのか誰か教えてもらえますか?

self.viewController = [[MainViewController alloc] init];

viewController はすでに CDVViewController オブジェクトなので、MainViewController で何をしているのかよくわかりません:S?

どんな助けでも素晴らしいでしょう

ありがとう

4

2 に答える 2

0

最初に 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

コードに応じて、リークを回避します。

于 2012-10-16T09:29:47.703 に答える
0

この行は、クラス MainViewController のインスタンスである新しいオブジェクトを作成し、そのポインタを変数 viewController に格納するだけです。

于 2012-10-16T08:41:22.023 に答える