1

アップルが提供するボイラープレートプッシュの違いと違いの意味は何ですか

     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
 NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];
 // ...
 // Pass the selected object to the new view controller.
 [self.navigationController pushViewController:detailViewController animated:YES];
 [detailViewController release];

このメソッド(PragProg iphone SDK開発ブックから)キャビネットコントローラーは、実装時にインターフェイスと@synthesizeに追加されます。

  [self.navigationController pushViewController:self.cabinetController
                                       animated:YES];

私はそれを私が扱っているSDKと本の新しさにチョークで書きます...しかしそれは本当に異なっているように見え、それが正しい言葉であるならば、非常に異なる所有権を意味しているようです。私の主な関心事は、質問が複雑すぎて答えられない場合、これらの方法の1つがよりメモリ効率が良いかどうかです。

編集:わかりました、まあ、この質問を投稿して私のビジョンをクリアした後...私はそこにそれほど大きな違いはないと思います。ボイラープレート法は、books法がキャビネットにプロパティを表示させる場合に、オンデマンドでメモリを割り当てます。ボイラープレート法がどういうわけかより良くなると思います...または同等です...その部分はまだあいまいです。どちらも同じようにリリースされるようですが、booksメソッドを使用してメモリが以前に保持されている可能性があります。

4

2 に答える 2

1

detailViewControllerAppleバージョンは、ナビゲーションコントローラのスタックからポップされると、ビューの割り当てが解除されるため、メモリ効率が高くなります。インスタンス変数にを保持する(したがって、割り当てが解除されないようにする)PragProgバージョンとは異なり、cabinetControllerAppleコードは作成中の詳細コントローラーへの参照を格納しません。

PragProgの実装は、ユーザーがキャビネットコントローラーとそれを保持しているビューコントローラーの間を頻繁に行き来する可能性がある場合に意味があります。これにより、オブジェクトの作成と割り当て解除を繰り返すことで発生するCPUオーバーヘッドが少し回避されるためですが、それが意味のある違いをもたらすかどうかを確認するために、プロファイルを作成する必要があります(通常はそうではありません)。

于 2010-09-30T01:19:58.113 に答える
0

2番目のケースでは、cabinetControllerはselfによって示されるクラスのプロパティであるように見えます。ボイラープレートでは、これは当てはまりません。

于 2010-09-30T01:19:07.280 に答える