• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

Singletonを使う場面はよくあるんですが、iOS4以降はGrand Central Dispatchがあるのでそれのdispatch_onceを使う必要があるみたいで、メモ。

GCD 前:

   1  + (MyController*)singleton {
   2  	static MyController *controller = nil;
   3  
   4  	if(!controller) {
   5  		controller = [[MyController] alloc] init];
   6  	}
   7  	return controller;
   8  }

GCD 後:

   1  + (MyController*)singleton {
   2  	static dispatch_once_t pred = 0;
   3  	static MyController *controller = nil;
   4   
   5   	dispatch_once(&pred, ^{
   6    		controller = [[MyController alloc] init];
   7   	});
   8   	return controller;
   9  }

Cocoa Fundamentals GuideのClass Factory Methods項の下のほーーーうにあるCreating a Singleton Instanceの説明もとても参考になります。これは読むべし:

Cocoa Fundamentals Guide
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32

また、Apple Developer Forumsのこの質問もとても勉強になります:

Apple Developer Forums
https://devforums.apple.com/message/455002#455002

下記も参考

Singletons: You're doing them wrong
http://cocoasamurai.blogspot.com/2011/04/singletons-your-doing-them-wrong.html

posted by Png satoko on Tue 28 Jun 2011 at 11:21

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry1957
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ