ãã¶ã€ã³ãã¿ãŒã³ãObjective-C + Cocoaã§è§£éããŠã¿ããã®é£èŒããããããçµããã«è¿ã¥ããŠãããæ®ããšãããããš2ãã¿ãŒã³ã§ãããä»åã¯ãTemplate Methodãã¿ãŒã³ãåãäžããã
Template Methodãšã¯
Template Methodããååã®Strategyãšåãããã¢ã«ãŽãªãºã ã«é¢ãããã¿ãŒã³ã«ãªããããã¢ã«ãŽãªãºã ãå®çŸãããšãã«ããããããã€ãã®ã¹ãããã«åå²ããŠãããããããŠããããšã§ãã¢ã«ãŽãªãºã ãæ¡åŒµããéã«ã¯ããµãã¯ã©ã¹ã§ãã®ã¹ããããäžæžãããã°ãããšããããšã«ãªããããããTemplate Methodãã¿ãŒã³ã ã
ãã®ãã¿ãŒã³ãããªããžã§ã¯ãæåã®èãæ¹ãã®ãã®ãšèšããã ãããGoFæ¬ã§ãããtemplate methodã¯ãããžãåºæ¬çãªãã®ã§ãã»ãšãã©ãã¹ãŠã®æœè±¡ã¯ã©ã¹ã§èŠã€ããäºãã§ããããšæžãããŠããããªããžã§ã¯ãæåããã°ã©ãã³ã°ã«æ £ããããã°ã©ããªãã°ãèªç¶ã«ãã®ãã¿ãŒã³ãèªåã®ããã°ã©ã ã«åãå ¥ããŠããã¯ãã ã
Template Methodãã¿ãŒã³ã®ããæ¹ãå®è£ æ¹æ³ã«ã€ããŠãããã§è°è«ããäºã¯ããŸããªãã ãããããããããCocoaã§äœ¿ãããŠãããã¿ãŒã³ãèŠãŠã¿ãããTemplate Methodã¯éåžžã«åºæ¬çãªãã®ãªã®ã§ãCocoaã®ãããããšããã§èŠã€ããäºãåºæ¥ããã©ããåãäžããŠãããã®ã ããæè§ãªã®ã§ãGoFæ¬ã«åŸã£ãŠã¿ããGoFæ¬ã§ã¯ãTemplate Methodã®ãµã³ãã«ã³ãŒããšããŠãAppKitã«åºã¥ããã®ãåãäžããŠãããããã®ãªãªãžãã«ã玹ä»ããããNSViewã®æç»ã«é¢ããã¡ãœããã«ãªãã
NSViewãšdrawRect:
Cocoaã§ã¯ãç»é¢ãžã®æç»ã¯ãNSViewãšããã¯ã©ã¹ãæ åœããŠãããäœããã®æç»ãè¡ãããå Žåã¯ããã®ã¯ã©ã¹ã®ãµãã¯ã©ã¹ãäœãäºã«ãªãã
ãã®ã¯ã©ã¹ãæäŸããæç»ãå®è¡ããããã®ã¡ãœããã¯ãã 1ã€ãdrawRect:ã§ããã
List 1.
- (void)drawRect:(NSRect)dirtyRect
NSViewã®ãµãã¯ã©ã¹ã¯ããã®ã¡ãœãããäžæžãããŠãæç»åŠçãå®è¡ãããåæç»ããªããŠã¯ãããªãé åã¯ãåŒæ°ã®dirtyRectã§ç€ºãããŠããããã®é åã«å¯ŸããŠããåŠçãè¡ããªãããšã§ãåŠçé床ãåäžãããäºãåºæ¥ãã
ãã®æ§é ããTemplate MethodãšããŠæããããšãåºæ¥ãã ãããNSViewãããã³ãã¬ãŒããšãªãæœè±¡ã¯ã©ã¹ã§ãããåå²ãããã¢ã«ãŽãªãºã ã¯ãdrawRect:ã¡ãœãããšãªãããµãã¯ã©ã¹ã¯ãã®ã¡ãœãããäžæžãããäºã§ãã¢ã«ãŽãªãºã ãæ¡åŒµåºæ¥ãã確ãã«ãTemplate Methodã®ç¹åŸŽãåããŠããã
ããŸããå€ãã®ã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã¯ããã®ãããªæ§é ãåããŠããã ãããç»é¢ãžã®æç»ãããŠãŒã¶ã€ã³ã¿ãã§ãŒã¹ã®æäŸã¯ãGUIãæã€ã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ã¯ãŒã¯ã«ãšã£ãŠå¿ é ã®æ©èœã§ããããã®å€ãã¯ãæç»ã¯ã©ã¹ãšæç»ã¡ãœãããæäŸããããã®ãµãã¯ã©ã¹ãäœãäºã§æ°ããGUIéšåãäœã£ãŠããããªããžã§ã¯ãæåãTemplate MethodãšãGUIã·ã¹ãã ã¯çžæ§ãããã
æç»ã®é«éå
ã€ãã§ãªã®ã§ãCocoaã®æç»åŠçã«ã€ããŠãããå°ã詳ãã玹ä»ãããã
ãã¬ãŒã ã¯ãŒã¯ã®æç»åŠçã«æ±ããããã®ã¯ããªããšãã£ãŠãé«éåã ãããæç»åŠçãäœéãªãã¬ãŒã ã¯ãŒã¯ã¯ãããã ãã§äœ¿ãç©ã«ãªããªãããã¡ãããæç»é床ã®å€§éšåã¯ãããŒããŠã§ã¢ã®èœåã§æ±ºãŸããé«éãªCPUãšGPUãããã°ãããã§äºè¶³ããäºããããã ãããœãããŠã§ã¢ã®ã¬ãã«ã§ãåºæ¥ãäºãããã
Cocoaã§ã¯æç»åŠçã®é«éåãã
- å¿ èŠãªé åããæç»ããªã
- å¿ èŠãªãšãã«ããæç»ããªã
ãšããããªã·ãŒã§å®çŸããããšããŠããã
åè ã®ãå¿ èŠãªé åããæç»ããªããã«ã¯ãdrawRect:ã¡ãœããã®åŒæ°ã䜿ããdrawRect:ã§ç€ºãããæç»é åã¯ããã®ãã¥ãŒãå ãã倧ãããæž¡ãããã®ã§ã¯ãªããç»é¢äžã«æç»ããéã«æäœéå¿ èŠãªå€§ããã«ãªãããã«åªåããããããšãã°ããã¥ãŒã®äžã«ä»ã®ãŠã€ã³ããŠãéãªã£ãŠããå Žåããã®äžã®é åã¯æç»ããå¿ èŠããªããªãã¯ãã ããã®ãããªããšãèæ ®ããŠãå¯èœãªéãå°ããé åãæå®ããããšãããã¢ããªã±ãŒã·ã§ã³åŽã§ãããèæ ®ããŠãåžžã«ãã¥ãŒå šäœãåæç»ããã®ã§ã¯ãªããå¿ èŠãªãšããã ãæç»ããããã«å®è£ ããäºã§ãé«éåãå®çŸããã®ã ã
åŸè ã®ãå¿ èŠãªãšãã«ããæç»ããªãããšãããã®ã¯ãdrawRect:ãåŒã³åºãé »åºŠãé¢ãã£ãŠããããŠã€ã³ããŠäžã«ãã¥ãŒãé 眮ãããšãäžçªå§ãã«ç»é¢ã«æç»ãããšãã«ãdrawRect:ãäžååŒã³åºãããããã®åŒã³åºãã®éã«ãæç»ã®çµæããã£ãã·ã¥ãããã®ã ããã以éã¯ãæç»é åã®å€æŽãªã©ãèµ·ãããªãéããdrawRect:ã¯åŒã³åºãããªããããšãã°ããŠã€ã³ããŠããã©ãã°ããã ãã ãšããã£ãã·ã¥ãããæç»çµæã䜿ãããã®ã ãããã«ãããdrawRect:ã®åŒã³åºãåæ°ãæžãããŠãé«éåãè¡ã£ãŠããã
ã§ã¯ãããã°ã©ã ã®éœåã§ããã¥ãŒã®å€§ããã¯å€æŽãããªããåæç»ããå¿ èŠãçºçããå Žåã¯ã©ãããããããã«ã¯ãsetNeedsDisplay:ã¡ãœããã䜿ãã
List 2.
- (void)setNeedsDisplay:(BOOL)flag
ãã®ã¡ãœããã¯ãã·ã¹ãã ã«åæç»ã®å¿ èŠãããäºãéç¥ãããããã䜿ãäºã§ãåæç»ãçºçãããäºãåºæ¥ãããã æ°ãã€ãããã®ã¯ããã®ã¡ãœãããåŒãã§ããåæç»ãçºçããèš³ã§ã¯ãªããæ£ç¢ºã«èšãã°ããã®ã¡ãœãããåŒã³åºããã³ã³ããã¹ãã§ãçŽæ¥drawRect:ãåŒã³åºãããèš³ã§ã¯ãªãããã®ã¡ãœããã§åæç»ã®èšå®ãããåŸãã€ãã³ãã«ãŒããåããã·ã¹ãã å šäœã®æç»åŠçãçºçãããšãã«æç»ãããã®ã ãããã¯ãã·ã¹ãã å šäœã®å¹çåãšãsetNeedsDisplay:ãè€æ°ååŒã°ãããšããŠããã äžåã®åæç»ã«ãŸãšããããã«ããã®ãããªä»çµã¿ã«ãªã£ãŠããã
ãã®ãããã®é«éåã®ããã®ä»çµã¿ãçè§£ããªãããå¹ççãªæç»åŠçãå®è£ ãããã