Apple補åã®ããã°ã©ã ãèªåã®äººçã§æžããããšæã人ã¯èª°ã§ããæ°ããããã°ã©ãã³ã°èšèªã§ããObjective-CãåŠã°ãªããã°ãªããªããšããæ¥ãŸãã ãã®å¹žããªç¬éãç§ãç解ããŸããã ãããŠããã®èšèªã®äž»ãªç¹åŸŽãããããèŠããããã«ãç§ã¯ããªããšå
±æããããã¥ã¡ã³ããç解ããªããç§ã®èããæŠèª¬ããããšã«ããŸããã
OOPã®åºçŸã®äžè¬çãªçè«
èšè¿°ãããã³ãŒããšãã®ç§»æ€æ§ãåå©çšããåé¡ã«ãããããã°ã©ããŒã¯ããããæŽçãæ§é åãããã³æœè±¡åãããããŸã§ã«ãªãæ¹æ³ãåžžã«æ¢ããŠããŸãã ãããã®åé¡ã解決ããããã«ãæ°ããããã°ã©ãã³ã°ãã©ãã€ã ãèšèšãã¿ãŒã³ãæ°ããèšèªãã³ã³ãã€ã©ãŒããã³ãããã®æšæºã©ã€ãã©ãªããœãããŠã§ã¢ãã©ãããã©ãŒã ããã¬ãŒã ã¯ãŒã¯ãäœæãããŸãã ããã¯ããµãããã°ã©ã ïŒæé ïŒã®ãã©ãã€ã ã圢æãããCALL \ RETããã»ããµåœä»€ãšã¹ã¿ãã¯ã®å©ããåããŠå®è£
ãããæ¹æ³ã§ãïŒå®éãçŸåšã®ã³ãã³ãã«ç¶ããã®ã§ã¯ãªããå®è¡ã¹ã¬ãããä»»æã®ã¢ãã¬ã¹ã«è»¢éããŠãããªã¿ãŒã³ããŸãïŒã 次ã«ãã¢ãžã¥ãŒã«ãã©ãã€ã ïŒåãã¡ã€ã«ã¯åå¥ã®ç¿»èš³åäœïŒã«ãããã¢ãžã¥ãŒã«ã®ã³ã³ãã€ã«ãããã³å®è¡å¯èœã¢ãžã¥ãŒã«ãžã®ã¢ã»ã³ããªïŒéçãŸãã¯åçïŒã®2段éã®ç¿»èš³ãè¡ãããŸããã
ãããžã§ã¯ãã®ã³ãŒãéã®å¢å ãšããããµããŒãããé£ããã«ããã1960幎代ã«æ°ãããªããžã§ã¯ãæåããã°ã©ãã³ã°ãã©ãã€ã ã圢æããå§ããããã°ã©ã ã¯ããã«å°ããªã³ã³ããŒãã³ãïŒããŒã¿åïŒã«åå²ãããŸããã ãã®æ¬è³ªã¯ãçžäºã«ã¡ãã»ãŒãžãéä¿¡ããããšã«ãããšã³ãã£ãã£ïŒãªããžã§ã¯ãïŒã®çžäºäœçšã«ãããŸãã åãªããžã§ã¯ãã¯ãããã°ã©ããŒã«ãã£ãŠå®çŸ©ãããããŒã¿åïŒããããã¯ã©ã¹ïŒã®å€æ°ã§ãã ãã®ãããªç¹å¥ãªãŠãŒã¶ãŒããŒã¿åïŒã¯ã©ã¹ïŒã®å®çŸ©ã¯ãããŒã¿ã»ããïŒäžå€åŒãã¡ã³ããŒïŒã®å®çŸ©ãšãããããæäŸããã«ãŒãã³ã»ããïŒã¡ãœããïŒã®2ã€ã§æ§æãããŸãã
ã¯ã©ã¹ã¯éåžžãçµã¿èŸŒã¿ïŒèšèªïŒããŒã¿åããã³/ãŸãã¯ä»ã®ã¯ã©ã¹ã«åºã¥ããŠãããã°ã©ããŒã«ãã£ãŠå®çŸ©ãããåãšããŠãã©ãŒããããããŸãã ãªããžã§ã¯ãæåã®ãã©ãã€ã ããµããŒãããªãCèšèªã®å Žåãããã¯æ§é äœã§ããå ŽåããããŸãã ã«ãŒãã³ã®ã»ããã¯éåžžã®é¢æ°ãšããŠå®è£
ãããå°ãªããšã1ã€ã®ãã©ã¡ãŒã¿ãŒïŒåŠçãããããŒã¿ã®ã»ãããžã®ãã€ã³ã¿ãŒïŒãå¿
ãå¿
èŠãšããŸãã
ãªããžã§ã¯ãæåã®ã¢ãããŒãã®äž»ãªå©ç¹ã¯ãç¶æ¿ãšåŒã°ããããã§ã«èšè¿°ãããã¯ã©ã¹ïŒäžå€åŒãšã¡ãœããã®è¿œå ãã¡ãœããã®åå®çŸ©ãåºæ¬ã¯ã©ã¹ã§å®çŸ©ãããã¡ãœããã®äœ¿çšïŒã«åºã¥ããŠæ°ããã¯ã©ã¹ãäœæã§ããããšã§ããã
ã¡ãœããã®ã»ããã¯ãäžå€åŒãšå¯Ÿè©±ããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ãã ïŒã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããã«ïŒã¯ã©ã¹ããŒã¿ãçŽæ¥å€æŽã§ããªãããšã¯ãã«ãã»ã«åã®ååãåæ ããŠããŸãã ãã®å³ã¯ãã¯ã©ã¹ãšãã®ãªããžã§ã¯ãã瀺ããŠããŸãã floatåã®äžå€åŒxãšãäžå€åŒã®å€ãè¿ãã€ã³ã¿ãŒãã§ã€ã¹ïŒã¡ãœããïŒdoubleXããããŸãã
ééããªãããã«å¿çãããªããžã§ã¯ãã«ã¡ãã»ãŒãžãéä¿¡ããå¿
èŠãããïŒã€ãŸããã¯ã©ã¹ãªããžã§ã¯ãã«å®è£
ããã¡ãœãããåŒã³åºãïŒå¿
èŠããããŸãããç¶æ³ã«ãã£ãŠã¯ããã®ãªããžã§ã¯ãã®ç¹å®ã®ã¯ã©ã¹ã¯äžæã§ãã ããšãã°ãAutoã¯ã©ã¹ã®ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒã®ãªã¹ãã®åèŠçŽ ã«ã¯Moveã¡ãã»ãŒãžãéä¿¡ããå¿
èŠããããŸããããªã¹ãã«ã¯Autoã¯ã©ã¹ã ãã§ãªãã掟çïŒç¶æ¿ïŒFordããã³Subaruã¯ã©ã¹ãžã®ãã€ã³ã¿ãŒãå«ãŸããŠããããšãããã£ãŠããŸãã ããã¯ããã¹ãŠã®ãªããžã§ã¯ãããã®ãããªã¡ãã»ãŒãžãåä¿¡ã§ããã¯ã©ã¹ã®ç¹å®ã®éå±€ããç¹å®ã®ã¡ãã»ãŒãžããªããžã§ã¯ãã«éä¿¡ããããšããã®ãªããžã§ã¯ãã¯ãã®éå±€ã®åºæ¬ã¯ã©ã¹ã§ã¯ãªããèªèº«ã®ã¯ã©ã¹ã«åŸã£ãŠåå¿ãããšããäºå®ã«ããããªã¢ãŒãã£ãºã ã®åçã®ãããã§ã®ã¿è¡ãããšãã§ããŸãã
ãªããžã§ã¯ãæåã®ã¢ãããŒãããµããŒãããæåã®èšèªã¯Simula67ã§ããã ãã®åŸãSmalltalkãç»å ŽããŸããã ãããŠã80幎代ã«C ++ã圢ã«ãªãå§ããŸãã-çŸä»£ã®ã·ã¹ãã ããã°ã©ãã³ã°ã®äž»èŠèšèªã§ãã 90幎代ã®æ¡åŒµãšæ¹åã«ãããå€ãã®ãã©ãã€ã ãšãã¶ã€ã³ãã¿ãŒã³ãçæãããObjective-Cèšèªãå«ããªããžã§ã¯ãæåã¢ãããŒãã®çŸä»£ã®ããžã§ã³ã«äžå¯éçãªåœ±é¿ãäžããŸããã
ã¡ãã£ãšããæŽå²
Objective-Cã¯ã80幎代ã«Smalltalkã«å¯ŸããCã®ä¿®æ£ãšããŠçãŸããŸããã ããã«ããã®å€æŽã¯ãæ°ããæ§ææ§é ãšç¹å¥ãªããªããã»ããµïŒã³ãŒããééããŠéåžžã®Cé¢æ°åŒã³åºãã«å€æïŒãšã©ã³ã¿ã€ã ã©ã€ãã©ãªïŒãããã®åŠçåŒã³åºãïŒãè¿œå ããããšã§æ§æãããŠããŸããã ãããã£ãŠãåœåãObjective-Cã¯Cã®ã¢ããªã³ãšããŠèªèãããŠããŸãããããæå³ã§ã¯ãããã¯äŸç¶ãšããŠåœãŠã¯ãŸããŸããçŽç²ãªCã§ããã°ã©ã ãäœæããObjective-Cããããã€ãã®ã³ã³ã¹ãã©ã¯ããïŒå¿
èŠã«å¿ããŠïŒè¿œå ã§ããŸããããã©ããããObjective-Cã®ããã°ã©ã ã§Cãèªç±ã«äœ¿çšã§ããŸãã ããã«ãããã¯ãã¹ãŠC ++ããã°ã©ã ã«é©çšãããŸãã 1988幎ãNeXTïŒããã³ãã以éã®AppleïŒã¯Objective-Cã®ã©ã€ã»ã³ã¹ãååŸãããã®ããã®ã³ã³ãã€ã©ãšæšæºã©ã€ãã©ãªïŒåºæ¬çã«SDKïŒãäœæããŸããã 1992幎ãGNUãããžã§ã¯ãã®éçºè
ãOpenStepãããžã§ã¯ãã«åå ããŠãèšèªãšã³ã³ãã€ã©ãæ¹åããŸããã ãã以æ¥ãGCCã¯Objective-CããµããŒãããŠããŸãã NeXTã賌å
¥ããåŸãAppleã¯SDKïŒã³ã³ãã€ã©ãã©ã€ãã©ãªãIDEïŒããããªãéçºã®åºç€ãšããŸããã ã³ãŒãã®IDEã¯XcodeãšåŒã°ããGUIã®å Žåã¯Interface BuilderãšåŒã°ããŠããŸããã GUIéçºçšã®Cocoaãã¬ãŒã ã¯ãŒã¯ïŒã ãã§ãªãïŒã¯ãObjective-Cããã°ã©ã ã®æãéèŠãªéçºç°å¢ã§ãã
Objective-Cã®æ©èœ
Objective-Cã¢ãžã¥ãŒã«ãã¡ã€ã«ã®æ¡åŒµåã¯ã.mãã§ãïŒC ++ãšObjective-Cã®æ··åã䜿çšãããå Žåãæ¡åŒµåã¯ã.mmãã§ãïŒã ããããŒãã¡ã€ã«ã¯ã.hãã§ãã Objective-Cã§äœæããããã¹ãŠã®ã¯ã©ã¹ãªããžã§ã¯ãã¯ãåçã¡ã¢ãªã«å²ãåœãŠãå¿
èŠããããŸãã ãããã£ãŠãç¹ã«éèŠãªã®ã¯idã¿ã€ãã§ãããããã¯ä»»æã®ã¯ã©ã¹ã®ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒã§ãïŒåºæ¬çã«void *ïŒã NULLãã€ã³ã¿ãŒã¯ãnilå®æ°ãšåŒã°ããŸãã ãããã£ãŠãä»»æã®ã¯ã©ã¹ãžã®ãã€ã³ã¿ãŒãidåã«ãã£ã¹ãã§ããŸãã åé¡ããããŸãïŒidã®äžã«é ããŠãããªããžã§ã¯ããã©ã®ã¯ã©ã¹ã«å±ããŠããããã©ã®ããã«ç¥ãã®ã§ããïŒ ããã¯ãç¹å¥ãªåºæ¬ã¯ã©ã¹NSObjectãç¶æ¿ããã¯ã©ã¹ã®ãªããžã§ã¯ãã«ååšããisaäžå€åŒã®ãããã§è¡ãããŸãïŒNSãã¬ãã£ãã¯ã¹ã¯NeXT Stepãè¡šããŸãïŒã isaäžå€åŒã¯äºçŽåClassã«å±ããŸãã ãã®ã¿ã€ãã®ãªããžã§ã¯ãã䜿çšãããšãç¬èªã®åºæ¬ã¯ã©ã¹ã®ååãã¯ã©ã¹äžå€åŒã®ã»ãããããã³ãã®ãªããžã§ã¯ããå®è£
ãããã¹ãŠã®ã¡ãœããã®ãããã¿ã€ããšãã®ã¢ãã¬ã¹ãïŒã»ã¬ã¯ã¿ãŒã®ããŒã«ã«ãªã¹ããä»ããŠïŒèŠã€ããããšãã§ããŸãã Cã®äºçŽèªãšã¯ç°ãªããã¹ãŠã®Objective-Cã®äºçŽèªã¯ã@ã§å§ãŸããŸãïŒããšãã°ã@ protocolã
selector ã
interface ïŒã éåžžãéå®ãããã¹ã³ãŒãïŒ@ privateã
protected ïŒãæã€ã¯ã©ã¹ã®äžå€åŒã®ååã¯ã¢ã³ããŒã¹ã³ã¢ã§å§ãŸããŸãã Cocoaã«ã¯ãæååçšã®éåžžã«äŸ¿å©ãªNSStringã¯ã©ã¹ããããŸãã ãã®ã¯ã©ã¹ã®æååå®æ°ã¯ãCã§é垞䜿çšãããæååå®æ°ãHello worldãã§ã¯ãªãã@ãHello worldããšããŠèšè¿°ãããŠããŸãã BOOLåïŒæ¬è³ªçã«ç¬Šå·ãªãcharïŒã¯ãYESããã³NOã®å®æ°å€ãåãããšãã§ããŸãã Objective-Cåºæã®ãã¹ãŠã®äºçŽèªïŒCãšã¯ç°ãªããobjc / objc.hããããŒãã¡ã€ã«ã«ãããŸãïŒã¯ä»¥äžã®ãšããã§ãã
- interfaceã¯ã©ã¹ãŸãã¯ã«ããŽãªã®å®£èšãéå§ããŸãïŒã«ããŽãª-ç¶æ¿ãªãã§è¿œå ã®ã¡ãœããã§ã¯ã©ã¹ãæ¡åŒµããïŒ
- @implementationã¯ã©ã¹ãŸãã¯ã«ããŽãªã®å®çŸ©ãéå§ããŸã
- @protocolãããã³ã«å®£èšãéå§ããŸãïŒçŽç²ãªä»®æ³é¢æ°ã§æ§æãããC ++ã¯ã©ã¹ã®ã¢ããã°ïŒ
- endã¯ã©ã¹ãã«ããŽãªããŸãã¯ãããã³ã«ã®å®£èš\å®çŸ©ãçµäºããŸã
- @privateã¯ã©ã¹äžå€åŒã®ã¹ã³ãŒããã¯ã©ã¹ã¡ãœããã«å¶éããŸãïŒC ++ãšåæ§ïŒ
- ããã©ã«ãã§ã¯ä¿è·ãããŠããŸãã ã¯ã©ã¹äžå€åŒã®ç¯å²ãã¯ã©ã¹ã¡ãœããããã³æŽŸçã¯ã©ã¹ã®ã¡ãœããã«å¶éããŸãïŒC ++ãšåæ§ïŒ
- @publicå¯èŠæ§ã®å¶éãåé€ããŸãïŒC ++ãšåæ§ïŒ
- tryå¯èœãªäŸå€çæã䌎ããããã¯ãå®çŸ©ããŸãïŒC ++ãšåæ§ïŒ
- @throwäŸå€ãªããžã§ã¯ããã¹ããŒããŸãïŒC ++ãšåæ§ïŒ
- catch ïŒïŒåã®tryãããã¯ã§çºçããäŸå€ãåŠçããŸãïŒC ++ãšåæ§ïŒ
- finallyäŸå€ãã¹ããŒããããã©ããã«é¢ä¿ãªããããã¯ã¢ãããé
ä¿¡ãããtryãããã¯ã®åŸã®ãããã¯ãå®çŸ©ããŸã
- @classã¯ã©ã¹ã宣èšããããã®çç¥åœ¢ïŒååã®ã¿ïŒC ++ã«é¡äŒŒïŒïŒ
- selector ïŒmethod_nameïŒã¡ãœããåmethod_nameã®ã³ã³ãã€ã«æžã¿ã»ã¬ã¯ã¿ãŒãè¿ããŸã
- @protocolïŒprotocol_nameïŒprotocol_nameãšããååã®ãããã³ã«ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã
- @encodeïŒtype_specïŒtype_specåã®ããŒã¿ã®æå·åã«äœ¿çšãããæååãåæåããŸã
- @synchronizedïŒïŒä»»æã®æç¹ã§1ã€ã®ã¹ã¬ããã®ã¿ã«ãã£ãŠå®è¡ãããã³ãŒããããã¯ãå®çŸ©ããŸãã
ã¡ãã»ãŒãžã³ã°
ãªããžã§ã¯ãã«äœããã®ã¡ãœããã匷å¶çã«å®è¡ãããã«ã¯ãå¿
èŠãªã¡ãœãããšåãååã®ã¡ãã»ãŒãžãéä¿¡ããå¿
èŠããããŸãã ãã®ãããªã¡ãã»ãŒãžã¯ã¡ãœããã»ã¬ã¯ã¿ãšåŒã°ããŸãã ããã±ãŒãžã®æ§æã¯æ¬¡ã®ãšããã§ãã
[receiver method];
ã¡ãã»ãŒãžã§ã¯ãåŒã³åºãããã¡ãœããã«ãã©ã¡ãŒã¿ãŒãæž¡ãããšãã§ããŸãã
[receiver method: 20.0 : 30.0];
åãã©ã¡ãŒã¿ãŒã®åã«ã¯ã³ãã³ãä»ããå¿
èŠããããŸãã ã³ãã³ã®æ°-éåžžã«å€ãã®ãã©ã¡ãŒã¿ãŒã ã¡ãœããåã¯ãåã³ãã³ãã©ã¡ãŒã¿ãŒã®åŸã«ç¶ããããšãã§ããŸãã
[receiver methodWithFirstArgument: 10 andSecondArgument: 20];
åŒæ°ã®æ°ã«å¶éã®ãªãã¡ãœããã¯ã次ã®æ§æã§åŒã³åºãããŸãã
[receiver undefinedNumberParameters: one, two, three, four, five, six, seven];
Cé¢æ°ãšåæ§ã«ãã¡ãã»ãŒãžãéä¿¡ãããšãç¹å®ã®ïŒããããvoidïŒå€ãè¿ãããŸãã
BOOL booleanValue; booleanValue = [reveiver method];
nilã¡ãã»ãŒãžãéä¿¡ãããšãã¡ãã»ãŒãžã¯æ¶ããŸãã é åºä»ããããã¡ãœãããå®è£
ããªãã£ãã¯ã©ã¹ã«å±ãããªããžã§ã¯ãã«ã¡ãã»ãŒãžãéä¿¡ãããšãäŸå€ãçºçãããã£ãããããªãå Žåãããã°ã©ã å
šäœãèšç»å€ã®çµäºã«ã€ãªãããŸãã ç¹å®ã®ãªããžã§ã¯ããã¡ãã»ãŒãžã«å¿çãããã©ããã確èªããã«ã¯ã次ã®ã³ãŒããã³ãã¬ãŒãã䜿çšã§ããŸãã
if ([anObject respondsToSelector: @selector(myMethodWith2Argumets::)]) {
ã¡ãã»ãŒãžã³ã°ã®ä»çµã¿
ã¡ãã»ãŒãžã®éä¿¡ã¯ããããã¿ã€ããšãšãã«Cé¢æ°ã§ãããŒããã£ã¹ããããŸãã
id objc_msgSend(id receiver, SEL method, ...);
å®éãSELã¿ã€ãã¯char const *ãšããŠå®çŸ©ãããŠããŸãããå®è¡æã«ãã¹ãŠã®ã»ã¬ã¯ã¿ãŒã¯ã°ããŒãã«ã»ã¬ã¯ã¿ãŒããŒãã«ã«åŸã£ãŠæŽæ°å€ã§ã€ã³ããã¯ã¹ä»ãããããããintãšããŠè§£éããæ¹ãé©åã§ãã
ã¬ã·ãŒããŒãªããžã§ã¯ãã®isaäžå€åŒã䜿çšããïŒCocoaã®åºæ¬ã§ããFoundationãã¬ãŒã ã¯ãŒã¯ã䜿çšããå Žåããã¹ãŠã®ã¯ã©ã¹ã¯NSObjectã¯ã©ã¹ãç¶æ¿ããå¿
èŠããããããisaã®ååšã¯é¿ããããªãïŒããã®é¢æ°ã¯ã¯ã©ã¹ã»ã¬ã¯ã¿ãŒã®ããŒã«ã«ãªã¹ããã¹ãã£ã³ããŠããã®ã¯ã©ã¹ã®ãªããžã§ã¯ããã¡ãœããã¡ãã»ãŒãžã«å¿çãããã©ãããå€æããŸãã ãã®ãããªã»ã¬ã¯ã¿ãŒãèŠã€ãã£ãå Žåãå¶åŸ¡ã¯ããªããžã§ã¯ãIDïŒãã®äžå€åŒãžã®ãã€ã³ã¿ãŒïŒãšãã»ã¬ã¯ã¿ãŒã®åŸã«æå®ãããobjc_msgSendïŒïŒé¢æ°ã®ãã©ã¡ãŒã¿ãŒãæž¡ãããã¯ã©ã¹ã®å¯Ÿå¿ããã¡ãœããã«è»¢éãããŸãã ã¡ãœããã«ãã£ãŠè¿ãããå€ã¯ãã¡ãã»ãŒãžã®éä¿¡çµæãšããŠè¿ãããŸãã ã¬ã·ãŒããŒãªããžã§ã¯ãã«ãã®ã»ã¬ã¯ã¿ãŒããªãå Žåãobjc_msgSendïŒïŒé¢æ°ã¯ãã®åºæ¬ã¯ã©ã¹ã®ã»ã¬ã¯ã¿ãŒã®ãªã¹ããã¹ãã£ã³ããŸãã
ãã®ã¹ããŒã ã§ã¯ãåŒã³åºããããšãã°ïŒ
[receiver ddObject: otherObject];
æŸéå
ïŒ
objc_msgSend(receiver, 12, otherObject);
ã°ããŒãã«ã»ã¬ã¯ã¿ããŒãã«12ã§ã¯ãæååãaddObjectïŒãã«å¯Ÿå¿ããŠããããã§ãã 次ã«ãobjc_msgSendïŒïŒé¢æ°ã¯ã¬ã·ãŒããŒãªããžã§ã¯ãã®ã»ã¬ã¯ã¿ãŒã®ãªã¹ããæ€çŽ¢ãããããèŠã€ããŠïŒã»ã¬ã¯ã¿ãŒ12ã§ã¡ãœãããå®è£
ããNSArrayã¯ã©ã¹ã®ãªããžã§ã¯ããšããïŒã次ã®ã¿ã€ãã®åŒã³åºããè¡ããŸãã
addObject(receiver, otherObject);
ã¡ãœãã宣èš
ã¯ã©ã¹å®£èšã®åã®ã»ã¯ã·ã§ã³ã®addObjectã¡ãœããã®ãããã¿ã€ãã次ã®ããã«ãªã£ãããšã«æ³šæããŠãã ããã
- (void)addObject: (id)otherObject;
ã€ãŸããå¿
èŠãªãã©ã¡ãŒã¿ãŒã¯1ã€ã ãã§ããã ãã ããã¡ãœããã¯ç¹å®ã®ããŒã¿ã»ãããåŠçããã«ãŒãã³ã§ãããšãããªããžã§ã¯ãæåã®ãã©ãã€ã ã®ååã«åºã¥ããŠãã¡ãœããã¯åŠçããããŒã¿ã®ã¢ãã¬ã¹ãæž¡ãå¿
èŠããããŸãã ãããã£ãŠããã®ãããªãã©ã¡ãŒã¿ã¯æé»çã«ã¯ã©ã¹ã¡ãœããã«æž¡ãããŸãã ãã®è¿œå ãã©ã¡ãŒã¿ãŒã«é¢ããã³ã³ãã€ã©ãŒã¯ãã¡ãœããã®ãããã¿ã€ãã®æåã®ãã€ãã¹ïŒ "-"ïŒãã¯ãªã¢ããŸãã ãã®ãããªã¡ãœããïŒåã«ãã€ãã¹èšå·ãä»ããŠããïŒã¯ããªããžã§ã¯ãïŒãŸãã¯ã€ã³ã¹ã¿ã³ã¹ïŒã¡ãœãããšåŒã°ããŸãã ããã¯ã©ã¹ã®ãªããžã§ã¯ãã§ã®ã¿åŒã³åºãããšãã§ããŸãã ã¡ãœããã®æ¬äœã§ã¯ãããŒã¿ã€ã³ã¹ã¿ã³ã¹ïŒãŸãã¯ã¡ãã»ãŒãžã®éä¿¡å
ã®ãªããžã§ã¯ãã®ã¢ãã¬ã¹ïŒãžã®ãã®ãã€ã³ã¿ãŒã¯äºçŽèªselfïŒC ++ã®ããã«é¡äŒŒïŒããã¢ã¯ã»ã¹ã§ããåºæ¬ã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ãžã®ãã€ã³ã¿ãŒã¯äºçŽèªsuperããã¢ã¯ã»ã¹ã§ããŸãã ããã«ãã°ããŒãã«ã»ã¬ã¯ã¿ããŒãã«ã®ãã®ã¡ãœããã®ã»ã¬ã¯ã¿ã§ããæé»ã®ãã©ã¡ãŒã¿_cmdããªããžã§ã¯ãã¡ãœããã«æž¡ãããŸãã C ++ããã°ã©ããŒã®èŠ³ç¹ããèŠããšãObjective-Cã®ãã¹ãŠã®ãªããžã§ã¯ãã¡ãœããã¯ãä»®æ³ããŒã¯ãŒãã§å®£èšãããŠããããã«èŠããåžžã«åçãªããªã¢ãŒãã£ãºã ã«åŸããŸãã
ãããã¿ã€ãã¡ãœããã®å
é ã«ãã©ã¹èšå·ïŒã+ãââïŒãä»ãããšããã®ãããªã¡ãœããã¯ã¯ã©ã¹ã¡ãœãããšèŠãªããããã¡ãããæé»çãªãã©ã¡ãŒã¿ãŒselfãåãå
¥ããŸããïŒããã¯C ++ã§éçã¡ãœããã宣èšããã®ãšäŒŒãŠããŸãïŒã ãããŠãselfãæããªããžã§ã¯ãã®isaäžå€éããªããã°ãã¹ãŒããŒãã€ã³ã¿ãŒã確ãã«æ©èœããŸããã
ãããã£ãŠãã¡ãœããã®ãããã¿ã€ãã¯æ¬¡ã®ããã«å®£èšãããŸãã
-|+ (< >) [ : (< >) [ [] : (< >)] ⊠]
äŸïŒ
+ (Class)class; + (id)alloc; - (id)init; - (void)addObject: (id)anObject; + (NSString *)stringWithCString: (const char*)aCString usingUncoding: (enum NSStringEncoding)encoding; - (NSString *)initStringWithFormat: (NSString *)format, âŠ;
ã¡ãœããããªããžã§ã¯ãïŒidã¿ã€ãïŒãŸãã¯ã¯ã©ã¹ïŒClassã¿ã€ãïŒãè¿ãå Žåããã¹ããããåŒã³åºãæ§æã䜿çšã§ããŸãã
[myLabel setText: [[NSString stringWithString: @âHelloâ] stringByAppendingString: @â worldâ]];
ããã§ãUIKitãã¬ãŒã ã¯ãŒã¯ã®UILabelã¯ã©ã¹ã®ãªããžã§ã¯ãã¯ãæåå@â Hello worldâã«çããäžå€ããã¹ãã®å€ã«èšå®ãããŸãã ãã®æååã¯ãæåå@â Helloâãš@â worldâãé£çµããŠåœ¢æãããŸãã 1ã€ç®ã¯ã@â Helloâå®æ°ãã©ã¡ãŒã¿ãŒã䜿çšããŠNSWithã¯ã©ã¹ã«stringWithStringã¡ãã»ãŒãžãéä¿¡ããçµæã§ãã ãã®ãããªåŒã³åºãã¯ããã©ã¡ãŒã¿ãŒæååã§åæåãããNSStringã¯ã©ã¹ã®ãªããžã§ã¯ããè¿ããŸãã 次ã«ã@â worldâãã©ã¡ãŒã¿ãŒãå«ãstringByAppendingStringã¡ãã»ãŒãžããã®ãªããžã§ã¯ãã«éä¿¡ãããŸãã ãã®ã¡ãã»ãŒãžãéä¿¡ããçµæã¯ãã¬ã·ãŒããªããžã§ã¯ãã®å€ãšæåååŒæ°ã®é£çµãå«ãNSStringã¯ã©ã¹ã®ãªããžã§ã¯ãã§ãã ãã®ãªããžã§ã¯ãã¯ããã©ã¡ãŒã¿ãŒãšããŠmyLabelãªããžã§ã¯ãã®setTextïŒã¡ãã»ãŒãžã«ãåé¡ãããŸãã
ã¯ã©ã¹å®£èš
Complex.hãã¡ã€ã«ã§åçŽãªè€çŽ æ°ã¯ã©ã¹ã宣èšããŸãã
#import <Foundation/Foundation.h> // NSObject NSString @interface Complex : NSObject { double _re; // double _im; // NSString *_format; // description } - (id)initWithRe: (double)re andIm: (double)im; // + (Complex *)complexWithRe: (double)re andIm: (double)im; // - (Complex *)add: (Complex *)other; // - (Complex *)sub: (Complex *)other; // - (NSString *)format; // _format - (void)setFormat: (NSString *)format; // _format - (double)re; // - (void)setRe: (double)re; - (double)im; - (void)setIm: (double)im; @end
ã芧ã®ãšãããåºåå
šäœãããŒã¯ãŒã
ã€ã³ã¿ãŒãã§ã€ã¹ãš
endã§å²ãŸããŠã
ãŸã ã æåã®ã¹ãããã¯ãäžå€åŒãäžæ¬åŒ§ã§å®£èšããããšã§ãã äžæ¬åŒ§ã®å€åŽã§ã¯ãã¡ãœããã宣èšãããŸãã 説æã¡ãœããã¯ãçç±ã®ããã«ã¯ã©ã¹å®£èšããæ¬ èœããŠããŸãã å®éã«ã¯ãdeallocã¡ãœãããinitã¡ãœãããšåæ§ã«ãã¯ã©ã¹å®çŸ©ã«ååšããŸãã è€éãªã¯ã©ã¹ã®ãªããžã§ã¯ãã«èª¬æã¡ãã»ãŒãžãéä¿¡ããå Žåãã»ã¬ã¯ã¿ãŒã®ããŒã«ã«ãªã¹ããèæ
®ãããŸããã³ã³ãã€ã«åŸããã®ãªããžã§ã¯ãã®ã¯ã©ã¹ã«ãã£ãŠå®è£
ãããã€ã³ã¿ãŒãã§ã€ã¹éšåã§å®£èšãããŠããªããã¹ãŠã®ã¡ãœããã®ã»ã¬ã¯ã¿ãŒãããã«å°éããŸãã ã€ãŸããinitãdescriptionãdeallocã¯çµ¶å¯Ÿã«æ£ããåŒã³åºãããŸãã
ãªããžã§ã¯ããäœæãã
ãã¹ãŠã®ãªããžã§ã¯ãã¯åçã¡ã¢ãªã«åæ£ãããããããªããžã§ã¯ãã®äœæã¯2段éã§å®è¡ããå¿
èŠããããŸãã1ïŒã¡ã¢ãªå²ãåœãŠïŒallocã¡ãã»ãŒãžïŒããã³2ïŒäžå€åŒã®åæåïŒã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒïŒã
MyClass *myObject = [[MyClass alloc] init];
ãªããžã§ã¯ããäœæããããå®å
šã«äœ¿çšã§ããŸãã
NSMutableArray *array = [[NSMutableArray alloc] init];
äžéšã®ã¯ã©ã¹ã«ã¯ãç¬èªã®ã€ã³ã¹ã¿ã³ã¹ãïŒ1ã¹ãããã§ïŒãã°ããäœæããããã®ã¡ãœããããããŸãã ãã®ãããªã¡ãœããã¯ã¯ã©ã¹ã®ã¡ãœããã§ããããã®ã¯ã©ã¹ã®ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒãè¿ããŸããéåžžããã®ååã¯ã¯ã©ã¹èªäœã®ååã§å§ãŸããŸãã ããšãã°ãã¡ãœããïŒ
+ (NSString *)stringWithCString: (char const *)string encoding: (NSStringEncoding)encoding;
allocããã³initåŒã³åºããè¡ããã«ã察å¿ããè¡ã§çµäºãŒãã§åæåãããæ¢è£œã®æååãè¿ããŸãã
NSString *myString = [NSString stringWithCString: âBla-bla-blaâ encoding: NSASCIIStringEncoding];
ãªããžã§ã¯ãã®å¯¿åœ
ãªããžã§ã¯ããžã®ãã€ã³ã¿ãã¹ã³ãŒããè¶
ãããšãå²ãåœãŠãããã¡ã¢ãªã¯å埩äžèœãªã»ã©å€±ããïŒãã¡ããããã®ãªããžã§ã¯ããžã®æåŸã®ãã€ã³ã¿ã§ãªãéãïŒããªãŒã¯ãçºçããŸãã ãã®ãããªæãŸãããªãçµæãåé¿ããããã«ãObjective-Cã¯ãªãœãŒã¹ãžã®ãªã³ã¯ãã«ãŠã³ããããšãããã©ãã€ã ããµããŒãããŠããŸãã ãããã£ãŠãåãªããžã§ã¯ãã«ã¯ããããžã®ãã€ã³ã¿ãŒã®æ°ã瀺ãæŽæ°ã«ãŠã³ã¿ãŒããããŸãã ãã®ã«ãŠã³ã¿ãŒããŒãã«éãããšããã®ãªããžã§ã¯ãã«å²ãåœãŠãããã¡ã¢ãªãã·ã¹ãã ã«è¿ãããŸãã allocã¯ã©ã¹ã®ã¡ãœãããåŒã³åºããåŸããã®ã«ãŠã³ã¿ãŒã¯1ã«çãããªããŸãã ãã®å€ãå¢ããã«ã¯ããªããžã§ã¯ãã«ã¡ãã»ãŒãžãéä¿¡ããå¿
èŠããããä¿æããåæžããå¿
èŠããããŸãã ãããã®ã¡ãœããã¯ãã¹ãŠNSObjectã«ãã£ãŠå®è£
ãããŠãããã©ã®ã¯ã©ã¹ã確å®ã«ç¶æ¿ããŸãã NSStringã¯ã©ã¹ã®éçãªããžã§ã¯ãã®ã«ãŠã³ã¿ãŒå€ïŒ@ "I am a string"ãªã©ïŒã-1ãã€ãŸãå¯èœãªæ倧å€ã§ããããšã«æ³šæããŠãã ããã ã«ãŠã³ã¿ãŒã®äœ¿çšäŸã次ã«ç€ºããŸãã
id anObject = [SomeClass alloc];
initã®å®è£
ã¯éåžžã«éèŠã§ãã ããã¯ã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒã§ãã ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãidãè¿ããååãåžžã«initã§å§ãŸããšããç¹ã§ç°ãªããããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯initã®ã¿ã§ãã ã³ã³ã¹ãã©ã¯ã¿ã®ã¹ããŒã ã¯ãã»ãŒæ¬¡ã®ãšããã§ãã
- (id)init { self = [super init];
ã¯ã©ã¹ã®åã®2ã€ã®ã¡ã³ããŒãš1ã€ã®æŽæ°äžå€åŒãæã€ã¯ã©ã¹ã®å
žåçãªç¹æ®ãªïŒããã©ã«ãã§ã¯ãªãïŒã³ã³ã¹ãã©ã¯ã¿ãŒã次ã«ç€ºããŸãã
- (id)initWithInt: (int)number { if (self = [super init]) { _myMember1 = [[SomeClass alloc] init];
NSObjectã®ãªãªãŒã¹ããã³ä¿æã®å®è£
ã¯ãã€ããªãã®ãŒçã«ã»ãŒæ¬¡ã®ãšããã§ãããåç
§ã«ãŠã³ã¿ãŒäžå€åŒãžã®ã¢ã¯ã»ã¹ããªãããã掟çã¯ã©ã¹ã§åå®çŸ©ããå¿
èŠã¯ãããŸããã
- (void)retain { [_internalLock lock];
ã€ãŸããdeallocã¡ãã»ãŒãžã¯ãªããžã§ã¯ãèªäœã«éä¿¡ãããŸãããã®ã¡ãœããã®å®è£
ã§ã¯ãå¿
èŠã«å¿ããŠãäžå€åŒã®ã«ãŠã³ã¿ãŒãæžãããåæ§ã®ã¡ãã»ãŒãžãåºæ¬ã¯ã©ã¹ã®ãªããžã§ã¯ãã«æž¡ããŠãåãããšãã§ããããã«ããŸãã æããã«ãNSObjectã«deallocã¡ãœãããå®è£
ãããšããªããžã§ã¯ãã«å²ãåœãŠãããã¡ã¢ãªã解æŸãããŸãã éåžžãäžéšã®ã¯ã©ã¹ã®deallocã¯æ¬¡ã®ããã«ãªããŸãã
- (void)dealloc { [_myMember1 release];
ã¢ã¯ã»ã¹æ¹æ³
ã¡ãœãããããªããžã§ã¯ãã®ã¢ãã¬ã¹ãè¿ããšãããŸãã¯ä»®ãã©ã¡ãŒã¿ãŒã䜿çšããŠäžå€åŒãåæåãããšããåç
§ã«ãŠã³ãã®æ£ããäœæ¥ã¯éåžžã«éèŠã§ãã éåžžããã®ãããªããšã¯ããªããžã§ã¯ãã®äžå€åŒãè¿ããèšå®ãããããããã¢ã¯ã»ã¹ã¡ãœããã«ãã£ãŠè¡ãããŸãã äžå€åŒã ãã§ãªãäžå€åŒã®å€ãè¿ãã¡ãœãããããã³ãã®å€ãèšå®ããã¡ãœããã®ååãæå®ããããšã¯æ
£ç¿ã§ãã
- (void)setRe: (double)re { _re = re; }
_reäžå€åŒã¯çµã¿èŸŒã¿åã«å±ããŠãããããå€ãå€æŽããŠãåé¡ã¯ãããŸããã ãã ããäžå€åŒãç¹å®ã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã§ããå Žåãåç
§ã«ãŠã³ã¿ãŒãèæ
®ããå¿
èŠããããããåçŽãªå²ãåœãŠãäžå¯æ¬ ã§ãã ãã®åé¡ã解決ããã«ã¯ã次ã®3ã€ã®æ¹æ³ã䜿çšãããŸãã
ãªãã·ã§ã³ïŒ3ã¯çŸåšã®ã»ã«ãããŒãã£ã³ã°ããŒã«ãè©°ãŸããããããããŸãæåããŸããããããã¯éåžžããŸãæãŸãããããŸããïŒæ¬¡ã®ã»ã¯ã·ã§ã³ãåç
§ïŒã
äžå€åŒã®å€ãèªã¿åãããã®ã¢ã¯ã»ã¹æ¹æ³ã¯ãåžžã«éåžžã«ç°¡åã§ãã
- (NSString *)text { return _text; }
ããã°ã©ã ã¹ã¬ããã®ã»ã«ãããŒãã£ã³ã°ããŒã«
ããã§ãã¡ãœããå
ã§äœæããããªããžã§ã¯ããã¡ãœããããè¿ããŠã¿ãŸãããã
-(NSString *)sayHelloToName: (NSString *)name withSurname: (NSString *)surname { NSString *retString = [[NSString alloc] initWithFormat: @â%@ %@!â, name, surname];
ãã©ãŒãããæååã¯Cèšèªæšæºã«æºæ ããŠããŸãããIDã¿ã€ããæå®ããå¿
èŠãããå Žåã¯ãïŒ
@ãã©ãŒãããæå®åã䜿çšãããŸãã ãã©ãŒãããã解æããæ¹æ³ã¯ãã©ã®æåãidã«çœ®ãæããããã©ã®ããã«ç解ããŸããïŒ æå®ããããªããžã§ã¯ãã®èª¬æã®èª¬æã¡ãœãããè¿ããã®ã«åçŽã«çœ®ãæããŸãã ãã®ã¡ãœããã¯ãå
ã
NSObjectã¯ã©ã¹ã«å¯ŸããŠå®£èšãããŠããŸããã NSStringã¯ãæååã®å
容ãåºåããããã«åå®çŸ©ããŸããã åå®çŸ©ããããšã«ãããä»»æã®ãªããžã§ã¯ãããã®æååã³ã³ãã³ããè¡šãããšãã§ããŸãã ããšãã°ãdoubleåã®2ã€ã®äžå€åŒãæã€è€çŽ æ°ã®ã¯ã©ã¹ã¯ãããå®è¡ã§ããŸãã
- (NSString *)description { return [NSString stringWithFormat: @âre: %lf im: %lfâ, _re, _im];
sayHelloToNameïŒwithSurnameïŒã¡ãœãããå®è¡ããããšãè¿ããããªããžã§ã¯ããåŠçåŸã«ãªãªãŒã¹ã¡ãã»ãŒãžãéä¿¡ããå¿
èŠãããããšãåŒã³åºãåŽã³ãŒããèªèããŠããªãå¯èœæ§ãé«ããããã¡ã¢ãªãªãŒã¯ãå¿
ãçºçããŸãã 圌ããããããããšãæšæž¬ãããšããŠãããã€ã³ã¿ãŒããªããžã§ã¯ãã®äžå€åŒã«æ»ãããå¯èœæ§ããããŸããããã¯ããã®ç Žå£ãæ·±å»ãªçµæã䌎ãããšãæå³ããŸãã ãŠãŒã¶ãŒã³ãŒãããªããžã§ã¯ãã解æŸããããšããŸã£ããèããªãããã«ãå°æ¥ãªããžã§ã¯ãã®èªå·±è§£æŸã®ããã®ã¡ã«ããºã ãå¿
èŠã§ãã ãã®åé¡ã¯ãNSAutoreleasePoolã¯ã©ã¹ã®ãªããžã§ã¯ãã䜿çšããŠè§£æ±ºãããŸã-NS
ãã®ã¯ã©ã¹ã®ãªããžã§ã¯ããäœæããåŸããã以éã«äœæããããã¹ãŠã®ãªããžã§ã¯ãã«èªå解æŸã¡ãã»ãŒãžãéä¿¡ã§ããŸãã ãã®å Žåããã®ãªããžã§ã¯ãã¯çŸåšã®ïŒæåŸã«äœæãããïŒã»ã«ãããŒãžããŒã«ã«é
眮ãããŸãã ç¹å®ã®ããŒã«ããªãªãŒã¹ã¡ãã»ãŒãžãåä¿¡ãããšããã¹ãŠã®ãªããžã§ã¯ãã«åãã¡ãã»ãŒãžãéä¿¡ããåç
§ã«ãŠã³ããæžãããŸãïŒåºæ¬çã«ã¯ç Žæ£ããŸãïŒã ãã®ããã«ã èªå·±ããŒãããŒã«ã«é
眮ããããªããžã§ã¯ãã¯ãããŒã«ã®åç¶æéäžãã£ãšã¡ã¢ãªã䜿çšãç¶ããŸãã ããã¯å°ããªäžæãªããžã§ã¯ãã«ã¯äŸ¿å©ã§ãããæéãçµã€ãšããªãã®éã®ã¡ã¢ãªãæ¶è²»ããå¯èœæ§ããããŸãã ãããã£ãŠãèªå·±ããŒãããŒã«ã«éä¿¡ãããå€æ°ã®äžæãªããžã§ã¯ããçæã§ããã«ãŒãã¯ãããŒã«ã«ïŒãã¹ããããïŒããŒã«ã§ãã¬ãŒã åããããšããå§ãããŸãã
Cocoaã䜿çšããããã°ã©ã ã®ã¹ã¬ããã¯ãæåã«ïŒä»ã®ãªããžã§ã¯ããäœæããåã«ïŒNSAutoreleasePoolã¯ã©ã¹ã®ãªããžã§ã¯ããäœæããæåŸã«ïŒä»ã®ãã¹ãŠã®ãªããžã§ã¯ããç Žæ£ããåŸïŒç Žæ£ããå¿
èŠããããŸãã Cocoaãã¬ãŒã ã¯ãŒã¯ã䜿çšããå ŽåãObjective-Cããã°ã©ã ã®ã¡ã€ã³ã¹ã¬ããã§ããmainïŒïŒé¢æ°ã¯åžžã«æ¬¡ã®ããã«ãªããŸãã
int main(int argc, char *argv[])
ãããŠãæ£ããsayHelloToNameïŒwithSurnameïŒã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãã
-(NSString *)sayHelloToName: (NSString *)name withSurname: (NSString *)surname { NSString *retString = [[NSString alloc] initWithFormat: @â%@ %@!â, name, surname];
ã¡ãªã¿ã«ãã»ã«ãããŒãžããŒã«ã®ãã¬ã€ã³ã¡ãœããã¯ãªãªãŒã¹ãšäŒŒãŠããŸãããå¯äžã®éãã¯ãèªå·±ãšå«ãŸããŠãããã¹ãŠã®ãªããžã§ã¯ãã解æŸããããšã«å ããŠãã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ã²ãŒã ã«å
¥ãããã®ãã³ããäžããããšã§ãã ãã ããiOSã«ã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ããªããããããã¯Mac OS 10.4以éã«ã®ã¿é¢é£ããŸãã
ã¯ã©ã¹å®çŸ©
次ã«ãComplexã¯ã©ã¹ã®ã¡ãœããã®å®çŸ©ãå«ãComplex.mãã¡ã€ã«ãæ€èšããŸãã
#import âComplex.hâ @implementation Complex - (id)init { return [self initWithRe: 0.0 andIm: 0.0]; } - (id)initWithRe: (double)re andIm: (double)im { if (self = [super init]) { _re = re; _im = im; _format = @âre: %.1lf im: %.1lfâ;
ããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãç¹å®ã®åæãã©ã¡ãŒã¿ãŒã§ç¹æ®ãªã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããŸãã complexWithReïŒandImïŒã¡ãœããã¯ãçŸåšã®èªå·±èªã¿èŸŒã¿ããŒã«ã«ããComplexã¯ã©ã¹ã®åæåããããªããžã§ã¯ããè¿ããŸãã descriptionã¡ãœãããåãããšãè¡ããNSStringã¯ã©ã¹ã®ãªããžã§ã¯ããè¿ããŸãã 以äžã«ãComplexã¯ã©ã¹ã䜿çšããããã°ã©ã ã®äŸã瀺ããŸãã
#import âComplex.hâ #import <stdio.h> // printf() int main() { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Complex *num1 = [[Complex alloc] init]; //0.0+0.0*i Complex *num2 = [[Complex alloc] initWithRe: 1.5 andIm: -2]; //1.5-2.0*i Complex *num3 = [Complex complexWithRe: 5 andIm: 7]; //5.0+7.0*i printf(â%s\nâ, [[num2 description] cStringUsingEncoding: NSASCIIStringEncoding]); //> re: 1.5 im: -2.0 printf(â%s\nâ, [[[num2 add: num3] description] cStringUsingEncoding: NSASCIIStringEncoding]); //> re: 6.5 im: 5.0 [num1 setRe: [num2 re]]; // _re num1 num2 [num1 setIm: [num3 im]]; // _im num1 num3 [num1 setFormat: @â%.2lf+%.2lf*iâ]; // num1 printf(â%s\nâ, [[num1 description] cStringUsingEncoding: NSASCIIStringEncoding]); //> 1.50+7.00*i [num1 release]; [num2 release]; //[num3 release]; , .. [pool drain]; return 0; }
ã«ããŽãªãšæ¡å€§
ãã§ã«èšè¿°ãããŠããïŒããã³ã³ã³ãã€ã«ãããŠããå¯èœæ§ã®ããïŒã¯ã©ã¹ã«ç¶æ¿ãªãã§ããã€ãã®ã¡ãœãããåå®çŸ©ããå¿
èŠãããå Žåãã«ããŽãªã䜿çšãããšãå€ãã®åŽåãªãã§ãããå®è¡ã§ããŸãã
ãããŠãããªãã¯ãã®ããã«ããã䜿çšããããšãã§ããŸãïŒ
CategorizdComplex *num1 = [[CategorizedComplex alloc] initWithRe: 1 andIm: 999]; Complex *num2 = [Complex complexWithRe: 0 andIm: 0]; CategorizedComplex *num3 = [num1 div: num2];
æ¡åŒµæ©èœã¯ãååã®ãªãã«ããŽãªãšããŠåªãããµãŒãã¹ãæäŸããŸãã
ãããã³ã«
Objective-Cãããã³ã«ã¯ãå¿
èŠã«å¿ããŠä»»æã®ã¯ã©ã¹ïŒãã¹ãŠã®ã¡ãœãããvirtual ... = 0æå®åã§å®£èšãããŠããC ++ã®ã¯ã©ã¹ã®ã¢ããã°ïŒã«ãã£ãŠå®è£
ã§ããã¡ãœããã®ã°ã«ãŒãã®æ£åŒãªå®£èšã§ããããŒãžã§ã³2.0ã§ã¯ããããã³ã«ã¡ãœããïŒ@requiredæå®åããµã€ã¬ã³ããšèŠãªãããïŒããã³éžæïŒ@optionalæå®åïŒãå¿
èŠã«ãªãå ŽåããããŸããã¯ã©ã¹ãå¿
èŠãªãããã³ã«ã¡ãœãããå®è£
ããŠããå Žåããã®ãããã³ã«ããµããŒãããã¯ã©ã¹ãšåŒã°ããŸãããããã³ã«ãšããããµããŒãããã¯ã©ã¹ã¯æ¬¡ã®ããã«å®£èšãããŸãïŒ
@protocol MyPrinterProtocol @required - (void)print; - (BOOL)switchedOn; @optional - (void)loadPapaer: (int)numberOfPages; @end @interface MyPrinter : NSObject <MyPrinterProtocol>
MyPrinterã¯ã©ã¹ã®ãªããžã§ã¯ãã¯ãprintã¡ãã»ãŒãžãšswitchOnã¡ãã»ãŒãžã®éä¿¡ãä¿èšŒã§ããŸããrespondsToSelectorïŒã確èªããåŸãloadPaperïŒã¡ãã»ãŒãžãéä¿¡ã§ããŸããããšãã°ãåãååã®ã¡ãœããã®å®çŸ©ãå®è£
ã«ååšããå¿
èŠããããŸãããããã³ã«ããµããŒãããã¯ã©ã¹ãªããžã§ã¯ãã®å®£èšã¯æ¬¡ã®ãšããã§ãã
MyPrinter *printer; id anotherPrinter = [[MyPrinter alloc] init]; [anotherPrinter print];
ããã«ã1ã€ã®ã¯ã©ã¹ã§è€æ°ã®ãããã³ã«ãæºããããšãã§ããŸãããããè¡ãã«ã¯ãã¯ã©ã¹å®£èšã®å±±æ¬åŒ§å
ã«ã³ã³ãã§åºåã£ãŠãªã¹ãããŸãã
@interface MyPrinter : NSObject <MyPrinterProtocol, OtherProtocol>
ãããŠããããããã³ã«ã«å¯Ÿå¿ããæªç¥ã®ã¯ã©ã¹ïŒidïŒã®ãªããžã§ã¯ãã宣èšããã«ã¯ã次ã®ããã«æžããŸãã
id <MyPrinterProtocol> somePrinter;
äŸå€
ãšã©ãŒåŠçã«ã¯ãäž»ã«2ã€ã®ã¢ãããŒãããããŸããã°ããŒãã«ã¹ããŒã¿ã¹å€æ°ã¯ããã®å€ã«ãã£ãŠåã®æäœã®æåãéç¥ããäŸå€ãçæããŸããäž¡æ¹ã®æ¬è³ªã¯ããšã©ãŒãçºçããã³ãŒããããããåŒã³åºããã³ãŒããããã解決ã§ããããšãæãã§ãããããå¯èœãªéã詳现ãªç¶æ³ãå ±åããŠå¶åŸ¡ãè¿ãããšã§ãã Objective-Cã¯ããããã®ã¢ãããŒãã®äž¡æ¹ããµããŒãããŠããŸãã
äŸå€ã¯ãããã¯ã©ã¹ã®ãªããžã§ã¯ãã§ãã圌ã¯ïŒåœŒã®ã¿ã€ãã«ãã£ãŠãïŒç¶æ³ã«é¢ããããã€ãã®æ
å ±ãæã£ãŠããŸãã䟿å®äžãCocoaã«ã¯ã2ã€ã®NSStringãªããžã§ã¯ããšä»»æã®ã¯ã©ã¹ïŒidåïŒã®1ã€ã®ãªããžã§ã¯ãã§åæåã§ããNSExceptionã¯ã©ã¹ããããŸãã
- (id)initWitnName: (NSString *)name reason: (NSString *)reason userInfo: (id)userInfo;
@throwæŒç®åã䜿çšããŠãäŸå€ãã¹ããŒããŠãã³ãŒã«ã¹ã¿ãã¯ããã¢ãŒã·ã§ã³ã¡ã«ããºã ãéå§ã§ããŸããçæãããäŸå€ããã£ããããã«ã¯ãã³ãŒãã®çæå¯èœãªéšåããtryãšããã¿ã€ãã«ã®ç¹å¥ãªãããã¯ã§å²ãå¿
èŠããããŸãïŒãã®ãããªãããã¯ã¯ãã¹ãã§ããŸãïŒããããŠããã®ãããã¯ã®åŸã«ãã¿ã€ãã«catchïŒïŒãæã€ãããã¯ãé
眮ããŸããæ¬åŒ§å
ã¯ãç³ãç«ãŠãããäŸå€ã®ã¿ã€ãã瀺ããŸããtryãããã¯ã®åŸã«ããã€ãã®catchïŒïŒãããã¯ãååšããå ŽåããããŸããäŸå€ãã¹ããŒãããåŸãã³ã³ãããŒã«ã¯ã¹ã¿ãã¯ãã¹ãã³ããtryãããã¯ãçµäºãããã¹ãŠã®catchïŒïŒãããã¯ãé çªã«ãã§ãã¯ããŠããã®catchãããã¯ã«å
¥ããŸãïŒïŒãäžæ¬åŒ§å
ã«ãäŸå€ã®åãæé»çã«ãã£ã¹ããããåããããŸãïŒå®å
šäžèŽãåºæ¬ã¯ã©ã¹ãŸãã¯idãžã®ãã€ã³ã¿ãŒïŒãã¿ã€ãäŸå€ãã©ã®catchïŒïŒãããã¯ãšãäžèŽããªãå Žåãã³ã³ãããŒã«ã¯ã¹ã¿ãã¯ãç¶ããŸããtryããããŒã®ãããããã¯ã®åŸã«finallyããããŒã®ãããããã¯ãããå Žåãtryãããã¯ã§äŸå€ãçºçãããïŒããã³catchïŒïŒãããã¯ãåŠçããããïŒãæåŸã®åœä»€ãå®è¡ããããã«é¢ä¿ãªããå¶åŸ¡ãæž¡ãããŸãã以äžã¯ãäŸå€ãçºçããfillã¡ãœããã§Cupã¯ã©ã¹ã®ãªããžã§ã¯ããæäœããäŸã§ãã
Cup *cup = [[Cup alloc] init]; @try { [cup fill];
finallyãããã¯ã§ã¯ãtryãããã¯ã§å²ãåœãŠããããªãœãŒã¹ã解æŸãããšäŸ¿å©ã§ãããçæãããäŸå€ã®ããã«è§£æŸãããŸããã
ããããã£
Objective-C 2.0ã®å ŽåãComplexã¯ã©ã¹ã®å®è£
ã¯æããã«åé·ã§ããã¢ã¯ã»ã¹ã¡ãœãããå€ãããããããã®å®çŸ©ã¯ç¶ç¶çãªã«ãŒãã³ã§ããããããã£ã䜿çšããŠæžãæããŸãïŒ
ããããã£ã¯ããããæŒç®åããããä»ãããªããžã§ã¯ããžã®ãã€ã³ã¿ãŒãä»ããŠã¢ã¯ã»ã¹å¯èœãªååã§ãããªããžã§ã¯ãã®äžå€åŒãååŸãŸãã¯èšå®ããã«ã¯ãã¢ã¯ã»ãµã¡ãœããã®ä»£ããã«ããããã£ã䜿çšããŸããããããã£ã宣èšãããšããããããã£ã«ãã£ãŠçæãããã¢ã¯ã»ã¹ã¡ãœããã®æ©èœãèšè¿°ããããã€ãã®ãã©ã¡ãŒã¿ãŒãæå®ãããŸãã
- getter = getterNameãsetter = setterNameèªã¿åãã¢ã¯ã»ã¹ã¡ãœãããgetterNameãšåŒã°ããå€æŽã®ããã«ãsetterNameãšåŒã°ããããšã瀺ããŸãã
- readonlyå€æŽã®ããã®ã¢ã¯ã»ã¹æ¹æ³ãçæããŸãã
- èªã¿æžãã¢ã¯ã»ã¹ã®äž¡æ¹ã®æ¹æ³ãçæ
- assignã¢ã¯ã»ã¹æ¹æ³ã®å€æŽã¯ãåçŽãªå²ãåœãŠã䜿çšããŠå®è£
ãããŸãã
- retainã¡ãã»ãŒãžãéä¿¡ããããã®åä¿¡å€ãretainãéä¿¡ããããã®äžå€éã®ä»¥åã®å€ãããã³ããã«åãå
¥ããããå€ãå²ãåœãŠãŸãã
- ã³ããŒéåžžã®å²ãåœãŠæŒç®åã䜿çšããŸãããåãå
¥ããããå€ã®ã³ããŒãå²ãåœãŠãŸãïŒå²ãåœãŠã®åã«ã³ããŒã¡ãã»ãŒãžãéä¿¡ãããŸãïŒ
- nonatomicå
éšããã¯ã䜿çšããŠãçæãããã¢ã¯ã»ã¹æ¹æ³ã§è€æ°ã®ã¹ã¬ãããåæããªãã§ãã ããïŒããã©ã«ãã§ã¯åæã䜿çšãããŸãïŒ
Complexã¯ã©ã¹ã®å®çŸ©ã§ã¯ãã¢ã¯ã»ã¹ã¡ãœãããæåã§èšè¿°ããå¿
èŠã¯ãããŸããããããã¯ã³ã³ãã€ã©ãŒã«ãã£ãŠçæããã以åã®ãã®ãšåäžã«ãªããŸãã
é 匵ã£ãŠ