Skip to content

Instantly share code, notes, and snippets.

@taktamur
Created October 16, 2012 14:16
Show Gist options
  • Save taktamur/3899519 to your computer and use it in GitHub Desktop.
Save taktamur/3899519 to your computer and use it in GitHub Desktop.
getterの中でalloc-initして返すのが流行なの?
// とあるViewControllerで見かけた書き方。
@interface PAMRootViewController ()
@property (readonly, strong, nonatomic) PAMModelController *modelController;
@end
@implementation PAMRootViewController
@synthesize modelController = _modelController;
- (PAMModelController *)modelController
{
// Return the model controller object, creating it if necessary.
// In more complex implementations, the model controller may be passed to the view controller.
if (!_modelController) {
_modelController = [[PAMModelController alloc] init];
}
return _modelController;
}
- (void)viewDidLoad
{
...
self.pageViewController.dataSource = self.modelController;
...
}
// このような書き方(getterメソッドの中でnilチェックしてオブジェクト作成)のメリットがいまいちわからない。
// * MemoryWarning来たときにreleaseできるようにしてるの?
// * UIViewControllerはinit:で何を呼ばれるかよくわからないしxib/storyboardではシリアライズされたオブジェクトが展開されるだけだから、
// initで書くような初期化を書く場所が無い?
// * viewDidLoadも何度も呼ばれるから、二度読みされた時用?
// どうやら最後の"viewDidLoadが何度も呼ばれる場合がある"からみたい。
// http://d.hatena.ne.jp/hana-da/20111107/1320671039
// メモリ不足時には、UIViewControllerはviewDidUnload等で解放された後、loadView->viewDidLoad と戻ってくる。
// そのときに再度メモリを確保しないように、privateなgetterメソッドの中で、オブジェクトの有無を確認してインスタンスを生成して返しているみたい。
// さらに言うと、UIViewControllerは、指定コンストラクタのような「必ず1回だけ処理されるinit」が無いので、そこで作り置きしておくこともできないみたい。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment