æ°åŠãšè«çã§ã¯ãã·ã³ã°ã«ãã³ã¯ãæ£ç¢ºã«1ã€ã®èŠçŽ ãå«ãã»ããããšå®çŸ©ãããŸãã ãããã£ãŠãããã°ã®å€§ããã«é¢ä¿ãªããããŒã«ãåãåºãããšãããã³ã«ãåããã®ãæã«å
¥ããŸãã ã·ã³ã°ã«ãã³ã¯ããã°ã©ãã³ã°ã§ã©ã®ãããªç¶æ³ãå¿
èŠãšããŸããïŒ ã³ããŒã§ããªããå
±æã§ãããªãœãŒã¹ãèããŠãã ããã ããšãã°ãåäžã®GPSã¢ãžã¥ãŒã«ãiPhoneã«ã€ã³ã¹ããŒã«ãããŠããŠã圌ã ããçŸåšã®åº§æšã決å®ã§ããŸãã
CLLocationManager
ãã¬ãŒã ã¯ãŒã¯ã®
CLLocationManager
ã¯ã©ã¹ã¯ããã¹ãŠã®GPSã¢ãžã¥ãŒã«ãµãŒãã¹ãžã®åäžã®ãšã³ããªãã€ã³ããæäŸããŸãã 誰ããèãããããããŸããïŒ
CLLocationManager
ã³ããŒãäœæã§ããå Žåãã¢ããªã±ãŒã·ã§ã³ã®è¿œå ã®GPSãµãŒãã¹ã®ã»ãããååŸããããšã¯å¯èœã§ããïŒ å¹»æ³ã®ããã«èãããŸã-1ã€ã®ããŒããŠã§ã¢ã®äŸ¡æ Œã§2ã€ã®GPSãœãããŠã§ã¢ãäœæããŸããã ãããå®éã«ã¯ãiPhoneã«ã¯GPSã1ã€ãããªããããäžåºŠã«1ã€ã®GPSããååŸã§ããŸãããããã¯è¡æãšã®å®éã®æ¥ç¶ãäœæããŸãã ãã®ããã2ã€ã®å¥ã
ã®GPSæ¥ç¶ãåæã«æäœã§ããã¹ãŒããŒã¢ããªã±ãŒã·ã§ã³ãäœæãããããå人ã«èªæ
¢ãããå Žåã¯ãããèããŠãã ããã
ãªããžã§ã¯ãæåã¢ããªã±ãŒã·ã§ã³ã®ã·ã³ã°ã«ãã³ã¯ã©ã¹ã¯ãåžžã«åãã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã ã¯ã©ã¹ãªããžã§ã¯ããæäŸãããªãœãŒã¹ã«ã°ããŒãã«ã¢ã¯ã»ã¹ãã€ã³ããæäŸããŸãã ãã®æ©èœãæã€ãã¿ãŒã³ã¯ã·ã³ã°ã«ãã³ãšåŒã°ããŸãã
ãã®ç« ã§ã¯ãObjective-Cããã³Cocoa Touch iOSãã¬ãŒã ã¯ãŒã¯ã§Singletonãã¿ãŒã³ãå®è£
ããã³äœ¿çšããå¯èœæ§ãæ¢ããŸãã
ã·ã³ã°ã«ãã³ãã¿ãŒã³ã¯ã©ã®ãããªãã®ã§ããïŒ
ã·ã³ã°ã«ãã³ãã¿ãŒã³ã¯ãããããæãåçŽãªãã¿ãŒã³ã§ãã ãã®ç®çã¯ãã¯ã©ã¹ãªããžã§ã¯ããã·ã¹ãã å
ã®å¯äžã®ã€ã³ã¹ã¿ã³ã¹ã«ããããšã§ãã ãŸããã¯ã©ã¹ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ã®äœæãçŠæ¢ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ããã¡ã¯ããªã¡ãœããïŒç¬¬4ç« ïŒã䜿çšã§ããŸããããã¯ãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãå¥ã®åäžã€ã³ã¹ã¿ã³ã¹ãäœæããããšãèš±å¯ããæå³ããªããããéçã§ããå¿
èŠããããŸãã å³7-1ã¯ãã·ã³ã°ã«ãã³ã¯ã©ã¹ã®æ§é ã瀺ããŠããŸãã

å³7-1ã ã·ã³ã°ã«ãã³ãã¿ãŒã³ã®éçæ§é ã
éçãª
uniqueInstance
ã¯ã
Singleton
ã¯ã©ã¹ã®å¯äžã®ã€ã³ã¹ã¿ã³ã¹ã§ãããéç
sharedInstance
ã¡ãœãããã¯ã©ã€ã¢ã³ãã«è¿ãã¯ã©ã¹å€æ°ãšããŠè¡šãããŸãã éåžžã
uniqueInstance
ã¯
uniqueInstance
ã
uniqueInstance
ãããŠãããã©ããã確èªã
uniqueInstance
ã ããã§ãªãå Žåãã¡ãœããã¯è¿ãåã«äœæããŸãã
ãæ³šæ
ã·ã³ã°ã«ãã³ãã¿ãŒã³ïŒã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã1ã€ãããªãããšã確èªããåäžã®ã¢ã¯ã»ã¹ãã€ã³ããæäŸããŸãã
* GoFã®ããã¶ã€ã³ãã¿ãŒã³ãïŒAddison-Wesleyã
1994ïŒã
ã·ã³ã°ã«ãã³ãã¿ãŒã³ã¯ãã€äœ¿çšã§ããŸããïŒ
次ã®å ŽåãSingletonãã¿ãŒã³ã®äœ¿çšãæ€èšããã®ã¯çã«ããªã£ãŠããŸãã
- ãã¡ã¯ããªã¡ãœãããªã©ã®æ¢ç¥ã®ã¢ã¯ã»ã¹ãã€ã³ããä»ããŠã¢ã¯ã»ã¹ã§ããå¿
èŠãããã·ã¹ãã å
ã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯1ã€ã ãã§ãã
- åäžã®ã€ã³ã¹ã¿ã³ã¹ã¯ç¶æ¿ã«ãã£ãŠã®ã¿æ¡åŒµã§ããã¯ã©ã€ã¢ã³ãã³ãŒãã¯æ¡åŒµãªããžã§ã¯ãã䜿çšããŠãããã©ãŒãã³ã¹ã倱ãããšã¯ãããŸããã
ã·ã³ã°ã«ãã³ãã¿ãŒã³ã¯ãå
±æãªãœãŒã¹ã«ã¢ã¯ã»ã¹ãã䟿å©ãªæ¹æ³ã§äžæã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããã®äœ¿ãæ
£ããæ¹æ³ãæäŸããŸãã éçãªã°ããŒãã«ãªããžã§ã¯ããžã®åç
§ã䜿çšããæ¹æ³ã¯ãåãã¯ã©ã¹ã®å¥ã®ã€ã³ã¹ã¿ã³ã¹ã®äœæã劚ããŸããã ã¯ã©ã¹ã¡ãœããã䜿çšããã¢ãããŒãã¯ãã°ããŒãã«ã¢ã¯ã»ã¹ãã€ã³ããæäŸã§ããŸãããã³ãŒãåé¢ã®æè»æ§ã«æ¬ ããŸãã
éçã°ããŒãã«å€æ°ã«ã¯ãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãžã®åäžã®åç
§ãå«ãŸããŸãã ã¢ã¯ã»ã¹ã§ããå¥ã®ã¯ã©ã¹ãŸãã¯ã¡ãœããã¯ãåã倿°ã䜿çšããä»ã®ã¯ã©ã¹ãŸãã¯ã¡ãœãããšå®éã«åãã³ããŒãå
±æããŸãã å¿
èŠãªãã®ã®ããã«èŠããŸãã ã¢ããªã±ãŒã·ã§ã³å
šäœã§åãã°ããŒãã«å€æ°ã䜿çšãããŠããéãããã¹ãŠãçŽ æŽãããèŠããŸãã ãããã£ãŠãå®éã«ã¯ãSingletonãã¿ãŒã³ã¯å¿
èŠãããŸããã ããããåŸ
ã£ãŠãã ããïŒ ããªãã®ããŒã ã®èª°ããããªãã®ã³ãŒãã§ããªããšåãã°ããŒãã«å€æ°ãå®çŸ©ãããã©ãããŸããïŒ ãã®åŸã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã«åãã°ããŒãã«ãªããžã§ã¯ãã®2ã€ã®ã³ããŒããããŸãããããã£ãŠãã°ããŒãã«å€æ°ã¯å®éã«åé¡ã解決ããŸããã
ã¯ã©ã¹ã¡ãœããã¯ããªããžã§ã¯ããäœæããã«åå²ããæ©èœãæäŸããŸãã ã¯ã©ã¹ã¡ãœããã§ã¯ããªãœãŒã¹ã®åäžã€ã³ã¹ã¿ã³ã¹ããµããŒããããŠããŸãã ãã ããã¯ã©ã¹ãããå€ãã®æ©èœãæäŸããããã«ç¶æ¿ãå¿
èŠãšããå Žåããã®ã¢ãããŒãã«ã¯æè»æ§ããããŸããã
ã·ã³ã°ã«ãã³ã¯ã©ã¹ã¯ãåäžã®ã¯ã©ã¹ãªããžã§ã¯ããäœæããŠã¢ã¯ã»ã¹ããããã®ãåäžã§äžè²«æ§ã®ããæåãªã¢ã¯ã»ã¹ãã€ã³ããä¿èšŒã§ããŸãã ãã®ãã¿ãŒã³ã¯ããã®ãµãã¯ã©ã¹ã®ãããããã€ã³ã¹ã¿ã³ã¹äœæã¡ãœããããªãŒããŒã©ã€ãããã¯ã©ã€ã¢ã³ãã³ãŒãã倿Žããã«ã¯ã©ã¹ãªããžã§ã¯ãã®äœæãå®å
šã«å¶åŸ¡ã§ãããããªæè»æ§ãæäŸããŸãã ããã«è¯ãããšã«ãã€ã³ã¹ã¿ã³ã¹åã¡ãœããã®å®è£
ã¯ããªããžã§ã¯ãã®äœæãåçã«åŠçã§ããŸãã ã¯ã©ã¹ã®å®éã®ã¿ã€ãã¯ãæ£ãããªããžã§ã¯ããäœæãããŠããããšã確èªããããã«ãå®è¡æã«æ±ºå®ã§ããŸãã ãã®ææ³ã«ã€ããŠã¯ããã«èª¬æããŸãã
ã·ã³ã°ã«ãã³ãã¿ãŒã³ã®æè»ãªããŒãžã§ã³ããããŸãããã®ã¡ãœããã§ã¯ããã¡ã¯ããªã¡ãœããã¯åžžã«åãã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãããä»ã®ã€ã³ã¹ã¿ã³ã¹ãå²ãåœãŠãŠåæåããããšãã§ããŸãã ãã®å¶éã®å°ãªããã¿ãŒã³ã®ããŒãžã§ã³ã«ã€ããŠã¯ããã®ç« ã§åŸè¿°ãããNSFileManagerã¯ã©ã¹ã®äœ¿çšãã»ã¯ã·ã§ã³ã§èª¬æããŸãã
Objective-Cã§ã®ã·ã³ã°ã«ãã³å®è£
ã·ã³ã°ã«ãã³ã¯ã©ã¹ãæ£ããèšèšããããšãæ€èšãã䟡å€ããããŸãã æåã®è³ªåã¯ãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã1ã€ã ãäœæã§ããããã«ããæ¹æ³ã§ãã C ++ãJavaãªã©ã®ä»ã®ãªããžã§ã¯ãæåèšèªã§èšè¿°ãããã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãã¯ããã®ã³ã³ã¹ãã©ã¯ã¿ãŒãprivateãšããŠå®£èšãããŠããå Žåãã¯ã©ã¹ãªããžã§ã¯ããäœæã§ããŸããã Objective-Cã¯ã©ãã§ããïŒ
Objective-Cã®ã¡ãœããã¯ãã¹ãŠéãããŠãããèšèªèªäœã¯åçã«åæå®ãããŠãããããã©ã®ã¯ã©ã¹ã§ããã³ã³ãã€ã«æã«éèŠãªãã§ãã¯ãªãã§ã¡ãã»ãŒãžãå¥ã®ã¯ã©ã¹ïŒC ++ããã³Javaã®ã¡ãœããåŒã³åºãïŒã«éä¿¡ã§ããŸãïŒã¡ãœããã宣èšãããŠããªãå Žåã¯ã³ã³ãã€ã©ãŒèŠåã®ã¿ïŒã Cocoaãã¬ãŒã ã¯ãŒã¯ïŒCocoa Touchãå«ãïŒã¯ãåç
§ã«ãŠã³ãã«ããã¡ã¢ãªç®¡çã䜿çšããŠãã¡ã¢ãªå
ã®ãªããžã§ã¯ãã®ã©ã€ãã¿ã€ã ãç¶æããŸãã ãããã®æ©èœã¯ãã¹ãŠãObjective-Cã§ã®ã·ã³ã°ã«ãã³ã®å®è£
ãããªãå°é£ã«ããŸãã
ãã¶ã€ã³ãã¿ãŒã³ã®å
ã®äŸã§ã¯ãã·ã³ã°ã«ãã³C ++ã®äŸã¯ãªã¹ã7-1ã®ããã«ãªããŸããã
ãªã¹ã7-1ã æ¬Design Patternsã®Singletonãã¿ãŒã³ã®åäžã®C ++ãµã³ãã«ã
class Singleton { public: static Singleton *Instance(); protected: Singleton(); private: static Singleton *_instance; }; Singleton *Singleton::_instance = 0; Singleton *Singleton::Instance() { if (_instance == 0) { _instance = new Singleton; } return _instance; }
æ¬ã§èª¬æãããŠããããã«ãC ++ã§ã®å®è£
ã¯ã·ã³ãã«ã§ç°¡åã§ãã éç
Instance()
ã¡ãœããã§ã¯ãéç
_instance
倿°ã®0ïŒ
NULL
ïŒ
_instance
ãã§ãã¯ãã
NULL
ã ãã®å Žåãæ°ãã
Singleton
ãªããžã§ã¯ããäœæãããè¿ãããŸãã Objective-Cã®ããŒãžã§ã³ã¯ããªãã®å
åŒãšããã»ã©éããããªã¹ã7-2ããã³7-3ã®ããã«èŠããã¯ãã ãšæã人ããããããããŸããã
ãªã¹ã7â2ã Singleton.hã®ã·ã³ã°ã«ãã³ã¯ã©ã¹å®£èš
@interface Singleton : NSObject { } + (Singleton *) sharedInstance; @end
ãªã¹ã7-3ã sharedInstance Singleton.mã¡ãœããã®å®è£
@implementation Singleton static Singleton *sharedSingleton_ = nil; + (Singleton *) sharedInstance { if (sharedSingleton_ == nil) { sharedSingleton_ = [[Singleton alloc] init]; } return sharedSingleton_; } @end
ãã®å Žåãããã¯éåžžã«åçŽãªç« ã§ãããObjective-Cã§å®è£
ããã1ã€ã®ãã¿ãŒã³ãæ¢ã«åŠç¿ããŠããŸãã å®éãå®éã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããã®ã«ååãªå®è£
ã®ä¿¡é Œæ§ãå®çŸããã«ã¯ãããã€ãã®å°é£ãå
æããå¿
èŠããããŸãã ã·ã³ã°ã«ãã³ãã¿ãŒã³ã®ãå³å¯ãªãããŒãžã§ã³ãå¿
èŠãªå Žåãå®éã®ã³ãŒãã§äœ¿çšã§ããããã«è§£æ±ºããå¿
èŠããã2ã€ã®äž»ãªåé¡ããããŸãã
- åŒã³åºãå
ã¯ãä»ã®å²ãåœãŠããŒã«ã䜿çšããŠã·ã³ã°ã«ãã³ãªããžã§ã¯ããäœæã§ããŸããã ãã以å€ã®å Žåã¯ãSingletonã¯ã©ã¹ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãäœæã§ããŸãã
- ã·ã³ã°ã«ãã³ãªããžã§ã¯ãã®äœæã«é¢ããå¶éã¯ãåç
§ã«ãŠã³ãã¢ãã«ãšäžèŽããŠããå¿
èŠããããŸãã
ãªã¹ã7-4ã¯ãç§ãã¡ãç®æããŠããå®è£
ã«è¿ãå®è£
ã瀺ããŠããŸãã ã³ãŒãã¯éåžžã«é·ãã®ã§ãè°è«ãç°¡åã«ããããã«ããã€ãã®éšåã«åããŸãã
ãªã¹ã7-4ã Objective-Cã§ã®ã·ã³ã°ã«ãã³ã®ããé©åãªå®è£
#import "Singleton.h" @implementation Singleton static Singleton * sharedSingleton_ = nil; + (Singleton*) sharedInstance { if (sharedSingleton_ == nil) { sharedSingleton_ = [[super allocWithZone:NULL] init]; } return sharedSingleton_; }
sharedInstance
ã¡ãœããå
ã§ã¯ãæåã®äŸã®ããã«ãã¯ã©ã¹ã®åäžã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããŠãããã©ãããæåã«ãã§ãã¯ãããããã§ãªãå Žåã¯æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæãããŠè¿ãããŸãã ãã ããä»åã¯
[[super allocWithZone:NULL] init]
ãåŒã³åºããŠã
alloc
ãªã©ã®ä»ã®ã¡ãœããã䜿çšãã代ããã«æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ãªãã
self
ã§ã¯ãªã
super
ãïŒ ããã¯ãã¯ã©ã¹å
ã®ãªããžã§ã¯ãã«ã¡ã¢ãªãå²ãåœãŠãããã®åºæ¬çãªã¡ãœããããªãŒããŒã©ã€ããããŠããããããã®æ©èœãããŒã¹ã¯ã©ã¹ïŒãã®å Žåã¯
NSObject
ïŒã«ã貞ãããã¡ã¢ãªãå²ãåœãŠãäœã¬ãã«ã®ã«ãŒãã³ãå®è¡ããå¿
èŠãããããã§ãã
+ (id) allocWithZone:(NSZone *)zone { return [[self sharedInstance] retain]; } - (id) copyWithZone:(NSZone*)zone { return self; }
èæ
®ããå¿
èŠããã
Singleton
ã¯ã©ã¹ã®ã¡ã¢ãªç®¡çã«é©çšãããããã€ãã®ã¡ãœããããããŸãã
allocWithZone:(NSZone *)zone
ã¡ãœããã¯ã
sharedInstance
ã¡ãœããããè¿ãããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãã ãã§ãã Cocoa Touchãã¬ãŒã ã¯ãŒã¯ã§ã¯ãã¯ã©ã¹ã¡ãœãã
allocWithZone:(NSZone *)zone
ãåŒã³åºããšãã€ã³ã¹ã¿ã³ã¹
allocWithZone:(NSZone *)zone
ã¡ã¢ãªãå²ãåœãŠããããã®åç
§ã«ãŠã³ã¿ãŒã1ã«èšå®ãããã€ã³ã¹ã¿ã³ã¹ãè¿ãããŸãã
alloc
ã¡ãœãã
alloc
å€ãã®ç¶æ³ã§äœ¿çšãããããšãèŠãŠããŸããã å®éã
alloc
ã¯ããŸãŒã³ã
NULL
ã«èšå®ããŠ
allocWithZone:
ãåŒã³åºããããã©ã«ããŸãŒã³ã®ã€ã³ã¹ã¿ã³ã¹ã«ã¡ã¢ãªãå²ãåœãŠãŸãã ãªããžã§ã¯ãã®äœæãšã¡ã¢ãªã®ç®¡çã®è©³çްã¯ãæ¬æžã®ç¯å²å€ã§ãã 詳现ã«ã€ããŠã¯ãããã¥ã¡ã³ããåç
§ããŠãã ããã
åæ§ã«ã
copyWithZone:(NSZone*)zone
ã¡ãœããããªãŒããŒã©ã€ãããŠãã€ã³ã¹ã¿ã³ã¹ã®ã³ããŒãè¿ããªãããåãã³ããŒãè¿ããŠ
self
è¿ãããã«ããå¿
èŠããããŸãã
- (id) retain { return self; } - (NSUInteger) retainCount { return NSUIntegerMax;
retain
ã
release
autorelease
ãªã©ã®ä»ã®ã¡ãœããã¯ãreturn
self
以å€ã¯ïŒåç
§ã«ãŠã³ãã¡ã¢ãªç®¡çã¢ãã«ã§ïŒäœãããªãããã«ãªãŒããŒã©ã€ããããŸãã
retainCount
ã¡ãœããã¯
NSUIntegerMax
ïŒ4,294,967,295ïŒãè¿ããã¢ããªã±ãŒã·ã§ã³ã®åç¶æéäžã«ã€ã³ã¹ã¿ã³ã¹ãã¡ã¢ãªããåé€ãããªãããã«ããŸãã
Retain SingletonãåŒã³åºãçç±sharedInstance
ã¡ãœãããã
allocWithZone:
æ»ãã·ã³ã°ã«ãã³ãªããžã§ã¯ãã§
retain
ãåŒã³åºãããšã«æ°ä»ãããããããŸãããã
retain
ãªãŒããŒã©ã€ããããå®è£
ã§ã¯å®éã«ç¡èŠãããŸãã ããã«ãããSingletonã¯ã©ã¹ã®ãå³å¯æ§ããäœãããããšãã§ããŸãïŒã€ãŸãã远å ã®ã€ã³ã¹ã¿ã³ã¹ã«ã¡ã¢ãªãå²ãåœãŠãŠåæåã§ããŸããããã¡ã¯ããªã®
sharedInstance
ã¡ãœããã¯åžžã«åãã€ã³ã¹ã¿ã³ã¹ãè¿ãããSingletonãªããžã§ã¯ããç Žå£å¯èœã«ãªããŸãïŒã ãµãã¯ã©ã¹ã¯ãé©åãªã¡ã¢ãªç®¡çå®è£
ãæäŸããããã«ã
retain
ã
release
ããã³
autorelease
å床ãªãŒããŒã©ã€ãã§ããŸãã
ã·ã³ã°ã«ãã³ãã¿ãŒã³ã®æè»ãªããŒãžã§ã³ã«ã€ããŠã¯ããã®ç« ã§åŸè¿°ãããNSFileManagerã¯ã©ã¹ã®äœ¿çšãã»ã¯ã·ã§ã³ã§èª¬æããŸãã
Objective-Cã®ã·ã³ã°ã«ãã³ãã¿ãŒã³ãã©ã®ããã«èŠãããã«ã€ããŠã¯ããã§ã«ååã«è©³çŽ°ã«æ€èšããŸããã ãã ãã䜿çšããåã«æ
éã«æ€èšããããšããã1ã€ãããŸãã å
ã®
Singleton
ã¯ã©ã¹ãç¶æ¿ããå Žåã¯ã©ããªããŸããïŒ ãããè¡ãæ¹æ³ãæ€èšããŠãã ããã
ã·ã³ã°ã«ãã³ç¶æ¿
alloc
åŒã³åºãalloc
super
ã«ãªãã€ã¬ã¯ããããããã NSObject
ã¯ã©ã¹NSObject
ãªããžã§ã¯ãã®ã¡ã¢ãªã®å²ãåœãŠãåŠçããŸãã 倿Žããã«Singleton
ã¯ã©ã¹ããç¶æ¿ããå Žåãè¿ãããã€ã³ã¹ã¿ã³ã¹ã¯åžžã«Singleton
åã«ãªããŸãã Singleton
ã¯ã©ã¹ã¯ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹åã¡ãœããããªãŒããŒã©ã€ãããããããã®ã¯ã©ã¹ããç¶æ¿ããã®ã¯ç°¡åã§ã¯ãããŸããã ããããç§ãã¡ã¯å¹žéã§ãã ããã€ãã®Foundation颿°ã䜿çšããŠãã¯ã©ã¹ã¿ã€ãã«åºã¥ããŠãªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åã§ããŸãã ãããã®1ã€ã¯id NSAllocateObject (Class aClass, NSUInteger extraBytes, NSZone *zone)
ã§ãã ãããã£ãŠããã·ã³ã°ã«ãã³ããšããã¯ã©ã¹ã®ãªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããå Žåãæ¬¡ã®ããšãã§ããŸãã
Singleton *singleton = [NSAllocateObject ([Singleton class], 0, NULL) init];
æåã®ãã©ã¡ãŒã¿ãŒã¯ã Singleton
ã¯ã©ã¹ã®ã¿ã€ãã§ãã 2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãã€ã³ããã¯ã¹ä»ãã€ã³ã¹ã¿ã³ã¹å€æ°ã®ä»»æã®æ°ã®è¿œå ãã€ãçšã«èšèšãããŠãããåžžã«0ã§ãã3çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãå²ãåœãŠãããã¡ã¢ãªãŸãŒã³ã®æå®ã§ãã ã»ãšãã©ã®å Žåãããã©ã«ãã®ãŸãŒã³ã䜿çšãããŸãïŒãã©ã¡ãŒã¿ãŒã¯NULL
ïŒã ãããã£ãŠããã®é¢æ°ã䜿çšããŠãã¯ã©ã¹ã®ã¿ã€ããç¥ã£ãŠãããªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åã§ããŸãã Singleton
ã¯ã©ã¹ããç¶æ¿ããã«ã¯äœãããå¿
èŠããããŸããïŒ sharedInstance
ã¡ãœããã®åæããŒãžã§ã³ã¯æ¬¡ã®ããã«ãªã£ãŠããããšãæãåºããŠãã ããã
+ (Singleton*) sharedInstance { if (sharedSingleton_ == nil) { sharedSingleton_ = [[super allocWithZone:NULL] init]; } return sharedSingleton_; }
NSAllocateObject
ããªãã¯ã䜿çšããŠã€ã³ã¹ã¿ã³ã¹ãäœæãããšã次ã®ããã«ãªããŸãã
+ (Singleton *) sharedInstance { if (sharedSingleton_ == nil) { sharedSingleton_ = [NSAllocateObject([self class], 0, NULL) init]; } return sharedSingleton_; }
Singleton
ã¯ã©ã¹ãŸãã¯ãã®ãµãã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åãããã©ããã¯é¢ä¿ãããŸããããã®ããŒãžã§ã³ã¯ãã¹ãŠãæ£ããè¡ããŸãã
ã¹ã¬ããã»ãŒã
ãã®äŸã®Singleton
ã¯ã©ã¹ã¯ãäžè¬çãªäœ¿çšã«ã®ã¿é©ããŠããŸãã ãã«ãã¹ã¬ããç°å¢ã§ã·ã³ã°ã«ãã³ãªããžã§ã¯ãã䜿çšããå Žåã¯ãã¹ã¬ããã»ãŒãã«ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã @synchronized()
ãããã¯ãæ¿å
¥ãããã sharedSingleton_
ã€ã³ã¹ã¿ã³ã¹ã®éç倿°ã®nil
ãã§ãã¯ã®åšãã«NSLock
ã€ã³ã¹ã¿ã³ã¹ã䜿çšããŸãã ä¿è·ããå¿
èŠãããä»ã®ããããã£ãããå Žåãããããatomic
ããããšãã§ããŸãã
Cocoa Touch Frameworkã§ã®ã·ã³ã°ã«ããŒã³ã®äœ¿çš
Cocoa Touch Frameworkã®ããã¥ã¡ã³ãã«æ
£ãããšãå€ãã®ç°ãªãã¯ã©ã¹ã®ã·ã³ã°ã«ããŒã³ã«ééããããšã«ãªããŸãã ãã®ã»ã¯ã·ã§ã³ã§ã¯ã UIApplication
ã UIAccelerometer
ã NSFileManager
äžéšã«ã€ããŠUIAccelerometer
ãNSFileManager
ã
UIApplicationã¯ã©ã¹ã®äœ¿çš
ãã¬ãŒã ã¯ãŒã¯ã§æãäžè¬çã«äœ¿çšãããã·ã³ã°ã«ãã³ã¯ã©ã¹ã®UIApplication
ã¯ã UIApplication
ã¯ã©ã¹ã§ãã ããã¯ãiOSã¢ããªã±ãŒã·ã§ã³ã®å¶åŸ¡ãšèª¿æŽã®äžå
åããããã€ã³ããæäŸããŸãã
åã¢ããªã±ãŒã·ã§ã³ã«ã¯ã UIApplication
åäžã®ã€ã³ã¹ã¿ã³ã¹ãããUIApplication
ã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«UIApplicationMain
颿°ã«ãã£ãŠã·ã³ã°ã«ãã³ãªããžã§ã¯ããšããŠäœæããã sharedApplication
ã¯ã©ã¹ã®ã¡ãœãããä»ããŠå®è¡æã«äœ¿çšå¯èœã«ãªããŸãã
UIApplication
ãªããžã§ã¯ãã¯ãçä¿¡ãŠãŒã¶ãŒã¡ãã»ãŒãžã®åæã«ãŒãã£ã³ã°ãã UIControl
ã¯ã©ã¹ã®ãªããžã§ã¯ãã®ã¢ã¯ãã£ããã£ã¡ãã»ãŒãžã察å¿ããã¿ãŒã²ãããªããžã§ã¯ãã«ãã£ã¹ããããããªã©ãããã°ã©ã ã®å€ãã®ãŠãŒãã£ãªãã£ã¿ã¹ã¯ãå®è¡ããŸãã éããŠãããã¹ãŠã®UIWindow
ãªããžã§ã¯ãã®ãªã¹ããä¿æããŸãã ã¢ããªã±ãŒã·ã§ã³ãªããžã§ã¯ãã¯UIApplicationDelegate
ã¢ããªã±ãŒã·ã§ã³ããªã²ãŒããªããžã§ã¯ãã«é¢é£ä»ããããŠãããèµ·åãã¡ã¢ãªäžè¶³ã®èŠåãã¢ããªã±ãŒã·ã§ã³ã®çµäºãããã¯ã°ã©ãŠã³ãããã»ã¹ãªã©ã®ããã°ã©ã å®è¡äžã®éèŠãªã€ãã³ããéç¥ãããŸãã ãããã®ã€ãã³ãã®ãã³ãã©ãŒã«ãããããªã²ãŒãã¯ã¢ããªã±ãŒã·ã§ã³ã®åäœãã«ã¹ã¿ãã€ãºã§ããŸãã
UIAccelerometerã¯ã©ã¹ã®äœ¿çš
Cocoa Touchãã¬ãŒã ã¯ãŒã¯ã®ãã1ã€ã®äžè¬çãªã·ã³ã°ã«ãã³ã¯ã UIAccelerometer
ã§ãã UIAccelerometer
ã¯ã©ã¹ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ãiOSããã€ã¹ã®çµã¿èŸŒã¿ã®å é床èšããå é床é¢é£ããŒã¿ãåä¿¡ããããã«ãµãã¹ã¯ã©ã€ãã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ã3次å
空éã®äž»è»žã«æ²¿ã£ãç·åœ¢å é床ã®å€åã«é¢ããããŒã¿ã䜿çšããŠãããã€ã¹ã®çŸåšã®åããšç¬éçãªåãã®å€åã®äž¡æ¹ã倿ã§ããŸãã
UIAccelerometer
ã¯ã©ã¹ã¯ã·ã³ã°ã«ãã³ãªã®ã§ããã®ãªããžã§ã¯ããæç€ºçã«äœæããããšã¯ã§ããŸããã å¯äžã®ã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¯ã»ã¹ããã«ã¯ã sharedAccelerometer
ã¯ã©ã¹sharedAccelerometer
åŒã³åºãå¿
èŠããããŸãã ããã«ã updateInterval
ããããã£ãšdelegate
ããããã£ãç¬èªã®ããªã²ãŒããªããžã§ã¯ãã«èšå®ããŠãã·ã³ã°ã«ãã³ã€ã³ã¹ã¿ã³ã¹ããå ±åãããå éããŒã¿ãåä¿¡ã§ããŸãã
NSFileManagerã¯ã©ã¹ã®äœ¿çš
NSFileManager
ã¯ã©ã¹ã¯ããã€ãŠMac OS X 10.5ããã³iOS 2.0ããåã®ã·ã³ã°ã«ãã³ãã¿ãŒã³ã®ãå³å¯ãªãå®è£
ã§ããã ãã®init
ã¡ãœãããåŒã³åºããŠãäœãè¡ãããããã®å¯äžã®ã€ã³ã¹ã¿ã³ã¹ãäœæã§ãã defaultManager
ã¯ã©ã¹defaultManager
ä»ããŠã®ã¿ã¢ã¯ã»ã¹ã§ããŸãã ãã ããã·ã³ã°ã«ãã³å®è£
ã¯ã¹ã¬ããã»ãŒãã§ã¯ãªãããããã®ã»ãã¥ãªãã£ã確ä¿ããã«ã¯NSFileManager
æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããå¿
èŠããããŸãã ãã®ã¢ãããŒãã¯ããã¡ã¯ããªã¡ãœãããåžžã«åãã€ã³ã¹ã¿ã³ã¹ãè¿ãã·ã³ã°ã«ãã³ã®ããæè»ãªå®è£
ãšèŠãªãããŸããã远å ã®ã€ã³ã¹ã¿ã³ã¹ãéžæããŠåæåããããšãã§ããŸãã
ãå³å¯ãªãã·ã³ã°ã«ãã³ãå®è£
ããå Žåã¯ãåã®ã»ã¯ã·ã§ã³ã§èª¬æããäŸãšåæ§ã®å®è£
ãå¿
èŠã§ãã ãã以å€ã®å Žåã allocWithZone:
ããã³ãã®ä»ã®é¢é£ã¡ãœããããªãŒããŒã©ã€ãããªãã§ãã ããã
çµè«
ã·ã³ã°ã«ãã³ãã¿ãŒã³ã¯ãiOSã ãã§ãªããã»ãŒãã¹ãŠã®çš®é¡ã®ã¢ããªã±ãŒã·ã§ã³ã§æãåºã䜿çšãããŠãããã¿ãŒã³ã®1ã€ã§ãã
ã·ã³ã°ã«ãã³ã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã調æŽããããã«éäžåã¯ã©ã¹ãå¿
èŠãªå Žåã«åœ¹ç«ã¡ãŸãã
ãã®ç« ã§ã¯ããªããžã§ã¯ãã®äœæã«é¢ãããã®ããŒãã®çµããã瀺ããŸãã æ¬¡ã®ããŒãã§ã¯ãç°ãªãã€ã³ã¿ãŒãã§ã€ã¹ãæã€ãªããžã§ã¯ãã®é©å¿/çµ±åã«çŠç¹ãåœãŠãããã€ãã®ãã¶ã€ã³ãã¿ãŒã³ãèŠãŠãããŸãã