0

こんにちは、私の英語が下手ですみません。

次の質問があります: ビューを追加する方が良いものは何ですか (私の質問は、メモリのコストとより良いプログラミング方法に関するものです)

このような:

UIViewController *vcToAdd = [[UIViewController alloc]
                             initWithNibName:@"vcxib"
                             bundle:[NSBundle mainBundle]];

[self.view addSubview:vcToAdd.view];

またはこのように:

NSArray *xibsArray = [[NSBundle mainBundle]
                      loadNibNamed:@"MMList_iPhone" owner:nil options:nil];

UIView *vwToAdd = [xibsArray objectAtIndex:0];
[self.view addSubview:vwToAdd];
4

1 に答える 1

1

最初のケースでは、作成した UIViewController を所有しています。これは、それを解放する責任があることを意味します。リリースしないと、おそらくどこかでリークが発生する可能性があります。

UIViewController *vcToAdd = [[UIViewController alloc] initWithNibName:@"vcxib" bundle:[NSBundle mainBundle]];
[self.view addSubview:vcToAdd.view];
[vcToAdd release];

2 番目のケースでは、Nib ファイルのコンテンツを所有していません。したがって、メモリを管理する責任はありません。とにかく、ここでは Nib ファイルのコンテンツを取得し、「そのまま」表示しています。その動作を制御する UIViewController がない場合。

Nib ファイルに含まれるビューに、アニメーションやタッチなどの複雑な管理が必要な場合は、UIViewController の方法がおそらく探しているものです...

Apple のメモリ管理ガイドをこちらこちら(英語) でご覧ください。

編集: 3 つ目の方法があります... Nib ファイルを使用せずにプログラムでビューを作成します。

// Create your content view
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
// Add objects to it
UIButton *button = [UIButton ...
UILabel *label = [UILabel ...
[view addSubview:button];
[view addSubview:label];
...
// Put your content view on screen
[self.view addSubview:view];
// Free memory
[view release];
于 2012-04-12T22:30:01.833 に答える