Anda di halaman 1dari 76

BECOME AN XCODER 

 

1
BECOME AN XCODER   

Copyright © 2006 by Bert Altenburg, Alex Clarke and Philippe Mougin. Version 1.2.

Attribution: The licensors, Bert Altenburg, Alex Clarke and Philippe Mougin, permit others to copy,
modify and distribute the work. In return, the licensees must give the original authors credit.

Non-commercial: The licensors permit others to copy, modify and distribute the work and use the
work in paid-for and free courses. In return, licensees may not sell the work itself, although it may
accompany other work that is sold.

2
BECOME AN XCODER T ' P

P
MS __________________________________________________ 4

; 0 = 0C% *______________________________________
 5

; 1 = 1A?,<(+ _____________________________
 7

; 2 = BD2 @&8$__________________________
 13

; 3 = #______________________________________________
 14

; 4 = OG_______________________________________
 20

; 5 = KRI7A_____________________________________
 25

; 6 = 9-__________________________________________
 33

; 7 = ! while ".L-_______________________________
 36

; 8 = 1F!)
/GUI(A___________________
 39

; 9 = >Q &_______________________________________
 55

; 10 = awakeFromNib_____________________________________ 59

; 11 = +J______________________________________________
 61

; 12 = ______________________________________________
 63

; 13 = 5______________________________________________
 69

; 14 = 3NTH:_________________________________________
 73

; 15 = 6E4__________________________________________
 75

3
BECOME AN XCODER /ă!m ñā

ñā
Apple ͸[g?0]³®‹œn Cocoa ¾=gãn_À£C$~LÂn­
b7 Xcode n_÷t9£n Mac OS X fo£)%1 Apple á–nŽ
Ž
ÇLÂÖ

-‰»?X Mac ¾=¬†n;”I~,Š:š¬£Í?X¾=¬†Í


Ă.”w»,Z0 Objective-C Vș Xcode ]¦ñ£¾=¬†nŸúāN±
{£ )%zÞ'‹S?ÛOZ0o‚‰ (GUI) nŸ.¾=6:ā·±{£ 
Ñ<Hz3‹_²ÛOZ0o‚‰n¾=C9£āN.”{£́v‡nÃƔ
þJ;ʲ£ ]Éㅄā,Š8?:njGã…ð«I~¨Æ€£V
ã…Øyò 8.”*~‹ sôC

<HZ0.”
<£ ÉƒanX€ÏÉZ0<nÇq2

Xý+Ә

PŠzÿ£R‹±Ì°…„āE^@ª@ÔØ­XÇ¿aª @ā­X±
Ìn“Œ6]„ā­Xý+nӘ<A]£ )%?’§n梣ðan¯5V$ð
aXp@îā“©Øn?íӘYË­à"=„ā.”£µ)%ˆKð«>ìnc
y

.”(MÄné\`(Ma:Fn¾=èçu£çnÑPŠ9ÑĀ
‹é\R‹é\°0"|ÐäiëÐ\<[4]¯né\°(M^Ff
%n¾=è¯n¤lPŠÉZ0‹@ëè]q2é\•enF\<
[4.3] &qé\ [4] nª F9ê¶Õrn¾=è#€PŠÉ9¾=èg9Fn{‰h
ΞBëÐ\<

volume = baseArea * height; // [4.3]

¾=¬†~‹û´nJ}»£ÍU,µã…Xå VÜâõTÚҔ.
¦ng?‘£ºkóD
ïÁā^.”µðÉßxö¼foÅUð«<H¬†¾
=\+.”~ÙO=ng%£S?4Hüøùn¹a Xcode8A¡ª
±ÅdPŠzÿ£„āR‹±Ì @ª @n“ŒÜâÒ҃­Xé\V$ݾ=
è›XQ]¥—W¤~<H×Jn

4
BECOME AN XCODER 8Į$~ · 0 à Fa—Ýtƒ

·0Ã
Fa—Ýtƒ
a—WÙĆĄN¡g\ĥÕ²UŽEÉĊĬaË4lį Mac ĭ°bHc˜ Macintosh
i:€Â2Ó ĜĜ*.Ê0)qZÍ+—Ä!âïè73)‹mĮñR%
|

1. ²ÛMži:² MacÊۜy‚iX Oą MacDNĊéÖĝĨ) Mac Ž(


û¤ Mac ģý)ę°Äãë¨åÐď¸ Objective-C v AppleScript g®5—ñā
ė:F9‹‡ÏFğÈi: AppleScript 0)æÜ ÞüĔĊ¬
ċaWÙ#- AppleScript for Absolute Starters²0)F)û^r°

http://www.macscripter.net/books

2. ĠÖÍ Macintosh ¦f…lA& ;g‹c˜ Âi: PCFÝÈC’ÖĒ


Ĉ Mac T ‰‹ ÷%|T‹MbG²F›Ê0)Í Mac ¦f…%|Iz²­R
«õ×ĎSx² Mac ė:ÓKëŸ_mÓKê²®äÒµ² Mac
‡ :?¿íĢ

‘ď›—ç´«
ć˜ÎKíùdistributed computing, DC”Ñ)Y:½hdM¹:
p”ù¦ kI Folding@home  SETI@home5—¾¯‹:lÀö¶²0)
ì ˜WÙÓK1ª DC „"øg'ÝtLŽ”ùU =½h DC „"
ø®)ÄVĕ>ĩ­RIz²8F² Mac ­R ˜Ă“?Áíù¦ ÓKDC
„"ø®<oį.SDN²®ä{áp58F­R½ˆăäĖZp Mac s
àÁ DC ”ÑäF5—û–³Bç`L”ùÇIz²/
˜ Mac
ðß²0)±³Rôþ.5—BJ²Ê0)qZ²ēĐ½˜ Mac ðßͳ
BDNn+ïè73i:€Ê0)p Mac ª°GHM»G©ò@(Ĥ DC
„"økIćď¢£}ĚÔÔ“ēĐ ˜²ÆĪ DC ”ÑĊÀº

http://distributedcomputing.info/projects.html

½˜†Ħ ˜¥Ĝ‹5ä, ī

3. ĉu Macintosh 73MÖÄϼĮ2‹QÅÀĀĘ
¼ĮČL¸ó
MĞÿÍjáfÕ²wi:¼ĮÝҀ[i²é:
˜¼ĮP'ÆĪ5
Ċ]Ø5ÝҀšDîp§ġ ™Ċč0¦Íj²đUŒÓúĉ̕lEɧ
ġ

4. ěÚ²i:¼Į2“ Macintosh ¼Į6ȋ0RÝҀÊäŠħÍjĕe¼


Į

5
BECOME AN XCODER I & 6 0 : /?$ )

5. D9= 04B<7-FE' Macintosh "(>/83


!
#3%( .G+H>/

@5,;A0 DC * C'21J/?$

6
BECOME AN XCODER *Ċv ° 1 » ’Â?¼„¸Ewƒ!

°1»
’Â?¼„¸Ewƒ!
=r«‹ô±‚æÈ^«'ÉôƲ®´;a¬«'É Õă6óuzáÏ^Â?
µŒ勫T´;a¬Z :M~«wÂ?¦ÎЭ=3«:ýYAÈkô±È^
}¼‹1ëª^¹è¢ c+ Xcode eô±Â?µŒ`Îû¨0F<²Š 
‹ċ«³ãqwúêS‘TÜäwÂ?µŒüۜgÁw»ÑŽ1S‘‹J+b
«{§ëªw¤(çôeċ«±Þ Objective-C Â?í

ô—«'É£bŒàTÃ˜Ê ™™

2+6=

 = 3 * 4…Ô * :ÚÓþì „+ey.Ô

ô—™™ˆD iC w„³ßŠ x á y wĉç’€‰w5ß


ç8ŽÙm«#žÎjnŠæ
‘ÎݶæËwVĉÍg•ć

2+6=x

y=3*4

Objective-C c+ĉçĉç$„’+e| y†’›lؖw5>ñ d=’


ç> „’ Objective-C %statement/LDÂ?í+eÅ’ĉçƒl
’›lw

[1]
x = 4;

ĉç x ³ƒl 4 ¶’«ùÖsÌg :%ÄQw9A’ÔC_„7ŠX%


%ºå‹ÔHÄŠæN...îd [1] wÂ?‡:«¯#ž€¾·G„ÚÓÝ
&„P2x©F 7BS‘å‹’›IwÂ?ߊïĆócompilereT
«ö w>Ă½@¸E«w Mac ož®Õw 0 á 1ÝpïĆóC\‹òĈá Õ

ąö w>„{§OĄw7B«å‹Å&bðd=’%„‚æHÄQwC
¶¼„«c+Ô¶’é w-w

=r«:Â?íR ÔÂ?í¼¿tïĆ_ y&¿tĂ½@«w Mac #¥D


wÂ?ÙIõ=rïĆóY÷tïĆ«wÂ?í&Î4«,ÇC¼=3S‘
:)ew»ÑÎ[gw&Î×ÆhK«U"øâw9

ÿÀĉç5(]ÝpïĆóC\`YA›šwÌÒG„fAÌÒwĉç5#ċÂ?íW
”qòĈW”q®Õ¶:«å‹:Â?í¡ā’ŸĀw—“„J;

7
BECOME AN XCODER (éi  1 ª ‚³=¬v§Dju

³=jÜÊ8ºž ¢ÆxãbugR!Xƒ(&¢Æx’ã
debugging

6?8‹(j³=ÑP¼ßJ\* x ¦ÏU>»¾jèÎ4Æ]9*^n-Ã
ÌrjèÎ4Æ#Æx pictureWidth [2]

[2]
pictureWidth = 8;

O À¬¼êÓæא‘²h—#+?é¼`³=¥|vo•g}Ÿ½j_
‚Ë{g»jŸ½¬v³=ÑjÍv3j.K—>U>\*Ív>…›j
èÎ4Æ pictureWidth É pictureWIDTHcm PictureWidth ©y3‡ÙŽÅ]P 
5 ®‚«:^HxèÎ4_‚«:0¨Í_T‚«:©Í:)·Ý
¬93—8Ò] [2] dV[¯¦‚£qP­7~I ¥|³=†6xÍ@!Ü
j#Œb

ԏ–‚èÎ4Þv"M‚«:cmB‚:)

Თ> jA+^a4èÎG²>Z£qË{Û;@ÖÇP#Q&0¨
2!GvW”¼o•±Õ™'¹Û;j{£qv—jèÎ4ÆŒv
Objective-C jpŠ:.K8 Objective-C >‰ˆ»¾j:â+ 5®‚«:^
HxèÎ4]9 pictureWidth—Þv<0jx {ptèÎ4j#çbså—
8èÎ4\*Í:)9fÛ;¦Z„q—³=jã”#˜°

9f—“t{1Ø¡Z£qÔçN¦‚w¿’ :)\*Î: v¢¤j


GvèÎ4Ƥ\*Î:·Ý$‚ ¤\*jv:"_"

 vZèÎ4j]

(ÐjèÎ4door8kdo8orc do_or
¤jèÎ4door 8"M ‚l,8door·ÝvÎ:
såjèÎ4Door8·ÝvÍ:)

š8PkÁ{9Fµè΂€P#*&¶C|ȬêPzz*^|ÈÃ
Új³=ÑL v*^H¦/Yj³=Ñ [3]

[3]
pictureWidth=8;
pictureHeight=6;
pictureSurfaceArea=pictureWidth*pictureHeight;


»%jÓæ×Äl,X8»’ EeèÎ4Æäà:´´%{ê³=
ÑS¸œP#\*l,

8
BECOME AN XCODER "Í^ ‹ 1 ” v–1•j‘8_i

[4]
pictureWidth = 8;
pictureHeight = 6;
pictureSurfaceArea = pictureWidth * pictureHeight;

Š,nnºP [5]SjÁRvr

[5]
pictureWidth = 8;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;

6K·/2R®È>¿·integers²·†NB,r [5.1] ² [5.2]


nTP ¿·j#Qq·P.Du¡ps¼ƒ7‘8_ikv|W_4·zd¢
O# J‹”†Æ$P.ɉVˆQ ¥·Y{Å·floating-
point

ºP [5] _–1¹M~¨=‚Ç,Z»Ê½p†›F@š †p,–1O#wvÌ


·)¯ ub:®§yC>&?¿·Ya{Å·,¬£Xo_Ž³¯l
"h@vÌ·"

[6]
int pictureWidth;
float pictureHeight, pictureSurfaceArea;
pictureWidth = 8;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;

, [6.1] 7int b Ì· pictureWidth jv¿·integer


7Duƙ#
¤«RvÌ·)¯4h@ RvÌ·E±¸+´r [6.2] b[ RvÌ·“
j float {Å·C>&?A ·’'_·,vP 3Å Ë_j
pictureWidth ²RvÌ·j(_C><†nT_j.\†„¿·int²{
Å·floatmt¨°˜\„jv{Å·L•jl¶†Ä¦„Ì· pictureSur-
faceArea h@l{Å· [6.2]

l¶»Ê½p`©vÌ·b_j¿·Yv3·’'_·UŸ¬£–1µpO
#’'_¬£€¾Í6»Ê½flGv ªT_Ì·e} €¾Í9*l
(_§yg>,!Pj int ² floatµp(·œ_€¾Í(_b%1»Ê
½µpe}"¸·œ_€¾ÍM‡#"¸_b%]

L.\DupO#c… Yµpc…±¸_·/U»Ê½Ã ue}_9x

ujžHÀ­5Du3Rv¥—‹vint ² float “3m;_g>#


QÂ0E YE±¸_·/, -·_IŒ  u>j long long ² double<

9
BECOME AN XCODER 'ÄV  1 Œ m–3`‰9W_

AH`#l”!r„œ«‡¹ClLm¤˜=bm–3†foE•(u
¿`{W=<`“·1;‡F/&¹·pÂW}sµŽ

7"©{X¦W°8¼³º²¯²‹!`gW<`1S{X¦mÃ
²Wk™ªž`gW{!xòkWµŽ¾n@)Q5!)W:ƒ
[7]
unsigned int chocolateBarsInStock;

$>
‘W²*!rbg.7 unsigned int !)/‡£unsigned int [?Y+²2 RP
—R¨

{!6\BmòFDk_Nš# [8]

[8]
int x = 10;
float y= 3.5, z = 42;

‡!½{¡cG» W 

/ZiWµICl›8mjT¥®Cl!H) ,W‚¢'3W­M`¥®
operatorsJ›8v&W²¸f®

+ )J›8 T

- )J›8’T

/ )J›8tT

* )J›8jT

H)‡G¥® Cl!›8…0¬ÁWf®§1S{ddwŸW Objective-C –3


†foW–3´{xž•€GqO‡!r`.blÀz%2QŠ4W

–3†foˆyžx x = x + 1; h,b1µI [9] P [10] £iW±T

[9]
x++;

[10]
++x;

‡KmI ‹YD x /aG|U ++ :Rò-­ZP^`]heW¶d


 ~ JWµI [11]  [12]

[11]
x = 10;

10
BECOME AN XCODER ¤F o 1 u Yx(vOr.GM

y = 2 * (x++);

[12]
x = 10;
y = 2 * (++x);

&•< [11] ‚A*Msf-Ly yB 20 , x yB 11Q‹G&U [12.2]


x &W 2 f-Jv" 1%+z6] x yB 11 , y yB 22•< [12] Gx
(”•< [13] G\CQ#

[13]
x = 10;
x++;
y = 2 * x;

%+x(pTZ9Š O5>YU$,P&4Y G¦4ŽPq¥x(†


¡˜£'Cjm qYl[8* I/O bŸav’!&+

'CjƒhenQHq‹jƒOt{œ—/O4XwS2}j N…=
7@‡ŒG"L3c=*  /  +  - S)‡Œ%+ 2 * 3 + 4 yB 10ž|;
N…jg?"TŒ†0›"¢GD2 * (3 + 4) yB 14

dDSjG:_1`€%P& Bš‘^‘]*:#–RR
VG•<
[14, 15]

[14]
int x = 5, y = 12, ratio;
ratio = y / x;

[15]
float x = 5, y = 12, ratio;
ratio = y / x;

&•< [14] GkEzCO 2*&•< [15] GoYkEzCOj‰TG


2.4

% OYja“iG‡Œ ‡Œ % GzCOoY‡Œoperando


Y‡Œ~-š‘dDG™‘'CoY‡ŒOˆK % G-PO8*@„G

[16]
int x = 13, y = 5, remainder;
remainder = x % y;

11
BECOME AN XCODER 4  ) 1 + "-, *

( remainder /. 3! x . 2*y + 3


  

21 % 7 . 0 30 % 2 . 0 50 % 9 . 5

22 % 7 . 1 31 % 2 . 1 60 % 29 . 2

23 % 7 . 2 32 % 2 . 0

24 % 7 . 3 33 % 2 . 1

27 % 7 . 6 34 % 2 . 0

$#0 2&' %31

12
BECOME AN XCODER *Ēv µ 2 ½ V=ËÖ  Äu®j

µ2½
V=ËÖ  Äu®j
ĈÊ`+=ÐÕwđî4äP”"ēP”wÈ<óTe"Đm[T˜r´Ö [1]

[1]
float pictureWidth, pictureHeight, pictureSurfaceArea;
pictureWidth = 8.0;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;

2qP”-€oXôbZÇÇwÀD­ *íìwÈ<óÑÌcÌ}íìÈ<š
Žw‘Ą[$ˆü&ˆMòâwÒÊ­oŽw¦HÎò&û=W:w/
…;t­=‹šÎV=»]È<󁎗S&­ wêŽËÖciK­Ö­w‰‹
È<óhlˆ+cHëw»•¼0Ó{Œë8ZċP”ªwƒč­z]šÎ
Œ­wÈ<ó! ËÖ[3­Ċ)c­¨Ñ¬¹9’Ď7RÚ8» ’wšÎ2ð
w;t­^­wÈ<óÉI $Ž­=ÂaËÖã¿"„Ow—S¶5B
wêUŽ •ËÖöx®8×ËÖw€’ý
d•±õ

// »ˆËÖ

8 Xcode ËֈåCw;tËք}[ÛÌ9DöQ&ph /* ç */ Î

/* »ˆ•ËÖ
AÛÌdD */

ăÅ Xcode ã£ĉH=KŸGP”ĂˆĆÇwès;FŒÈ<£ĉ•#?Aàš
w£ĉuäŒËÖuoutcommentĈÊQ¼0wÈ<óph /* */ έ"ïš
w¤+ËÖ¯»¼0wÈ<ócfùw¼0ˆˆ_ҏÆÝH»•<"ē
­+cą²¡ĉābcè;t¸ËÖ¢cw¼0Ž‡k•“ɉ•đî­"!
DïšwÈ<ócQø5w“‡kÉ>đîÃÙfV=ËÖ¢cw¼0ˆM*©ÝH

ËÖw‘ŽmˆÄ"Y¾wŒ}Ew%! Öďcès&”hlHë\ˆ„=þ
Kw»ˆ6Œ­ꎰû‹È<ó8¥ëA­".LŠ­*ßhw¡ĉˆ
ˆ8»•¼0wÈ<ó­ ÿ×J+ËÖc|Þ]NČnyÄu,È<ó°Ã
cw\Ïābcè;t­*8º•îúgî[`+h‰•8÷(Ø·Áwž
œñ‚­ÿ×8âéwÈ<ó™ċ+ËÖËs§@›-=š–8âéíìÈ<ó€1ì
Ëֈ=þKw&ÑiK­´³†æ[ēÈ<ºđ«ÜŒ˜r

(›wôb[V=~ áP”'©íìšð9wËÖ»ˆ6Œ&”ÔĀć8Íwè
s 

13
BECOME AN XCODER 0ãp ¡ 3 © a@

¡3©
a@
b2xRˆbqªt±@Ð (AG„)‚b#PÍ Gq±@LÚA~
łYM9 Objective-C qh\¯Rˆ-¶sVqž”±@|=K£Üq

=n‰±@#P§I
’
tq„)+šºu›ß«TZŠ0’ÝC*~
€7q±@Ð%‘º;q±@…Ò! <­B=nÁ†A–’ݝ¬-¶;<­‰
:Š0ÏÎq’ݦ|‰Èå9u›Œl¬ºQ“i_‰:9
C ˆ¹!‰o^£Ü±@Ðä+UŒlŠ0’Ý

¦‰—ÞqÂXÆ|S„)Ö+ˆq"‘¿£•^]=%‘A£„)%1^ƒ
Ë·†×.Ù}Ǧ[„)q²n|%vØqš6 ̂}¦[±@Ð^
’Ý||;`¦£Êa@functionq„)AEq8>%\1¦‰8
>^c'¦£a@Zä¦[±@Ð¥™G\1a@¦‰»gu›˜/9CW‰±@¨F
A‰a@;`main() a@ÑàÕº$T« main() ¦‰a@¦Î+rÆ;™
G®µ‚œ‹Á´e™G±@Ð

äRˆ ¢ہ main() a@[1]

[1]
main()
{
 // main() a@ãӚq±@нkC¤
}

„) [1.1] â3a@8Ê4N "main"Ÿ ^|,{ÀÄ&{À"main" |‰w


>D main() a@|W‰±@¨-¶‚AqM|¼f¾Eqa@Ž%1­
5K@^+ˆd8{Àq?;|A+q¸¾qM|Rˆš;/©°z”Ô+
;Ÿ ^q [1.2,1.5] GAÉ{ÀRˆ-¶SRˆq±@Ðj;¦É{Àµ5K
Jk¦É{ÀµqmHʦ‰a@qãRœ¡©[±@ÐÇ^ZS+ˆj
½b+ˆÃ$qJ½ [2]

[2]
main()
{
 // á͈;CyO
 float pictureWidth, pictureHeight, pictureSurfaceArea;

 // Rˆse¦[áͳ¦[á͉‡

14
BECOME AN XCODER m 7 M 3 P -

 pictureWidth = 8.0;
 pictureHeight = 4.5;

 // 2<E9?_3V 9
 pictureSurfaceArea = pictureWidth * pictureHeight;
}

5(BklaTc. main() mR[Ae.Fi9'j(B`]>f%)


U^9Tcn(B,bCTL&+U^
F>9 main()
- (BH:C circleArea() - [3]

[3]
main()
{
 float pictureWidth, pictureHeight, pictureSurfaceArea;
 pictureWidth = 8.0;
 pictureHeight = 4.5;
 pictureSurfaceArea = pictureWidth * pictureHeight;
}

circleArea() // [3.9]
{

O;hQ#<(B@ [3.9] 3W091-g)$"*Kd6Y-9ND


<!4 main() - m 9S\`-<I89

(B9Z- circleArea() XJ main() -/n(B==>"G. [4]

[4]
main()
{
 float pictureWidth, pictureHeight, pictureSurfaceArea,
 circleRadius, circleSurfaceArea; // [4.4]
 pictureWidth = 8.0;
 pictureHeight = 4.5;
 circleRadius = 5.0; // [4.7]
 pictureSurfaceArea = pictureWidth * pictureHeight;

15
BECOME AN XCODER $©Z v 3 { J2

 // ?j/6L?j[J2
 circleSurfaceArea = circleArea(circleRadius); // [4.11]
}

œX†yk~2I[z)DB5*œCšG [3]

?j‡–‘ float ¨— [4.4]D\Oinitialize¨— circleRadius&<€!


ki [4.7]|
X†[¡Žc [4.11] 8y}c circleArea() J2wL[.0sS
C¨—+ circleRadius wT‹/a‚!ck circleArea() J2[—argument
¨— circleRadius [irw„”€J2 circleArea()‰J2 circleArea() @!S8[
’:>3_!#ƒ„-returnWª?jlA/šG [3] [ circleArea() J2
Hby'E [5]

œX†Q * circleArea() J2

[5]
circleArea(float theRadius) // [5.1]
{
 float theArea;
 // …Mu pi hm r "
 theArea = 3.1416 * theRadius * theRadius; //[5.5]
 return theArea;
}

/ [5.1] ?jPŒ circleArea() J2•fko£—i:eŸ ‰t4K_yk—i


w 1/N+e theRadius [¨—?jF%v k¨— }c theArea H 1/ [5.5]
g’[W,6?j#ƒ/ [5.3] F%“/ main J2 [4.4] ˜[YH^=!
sˆX†K¨— theRadius [^=c/ [5.1] 8[aR‚>3[v [5.6] 8„-W€L
ykJ2[~2d|_/v [4.11] 8¨— circleSurfaceArea wxPeyki

/šG [5] [J2Š>3pk. ?j¢B`PykJ2-„[n];


e9›¦ž•f?jH:ykq:7B5(9¤«[.,6/y¥?j™V!c
§U float ]; [6.1]

[6]
float circleArea(float theRadius)
{
 float theArea;
 theArea = 3.1416 * theRadius * theRadius;
 return theArea;
}

16
BECOME AN XCODER ™ K g 3 l C+

)"g [6.1] 1Lg^*NLi^C+x&BL~`8˜‡ theArea L\V–


I float R65W^q+hZ_dv‰E2I main() C+ L˜‡ circleSurfaceArea
[4.11] -rX"L~`9ƒ)/B‹•Œm<-e'i>”—z:]

=OH-LC+k…Y‡4)J<-‡ T| oVvL8@]VM
L
[7]
int throwDice()
{
 int noOfEyes;

 // B,I 1 D 6 tw‡Lq+Š

 return noOfEyes;
}

=OH-LC+ky&x^\)J^C+<-&x\–I “void” R60


“return” [QV-nL)Jd@Q return “‘* Sm
r 3
‡\G˜‡$

[8]
void beepXTimes(int x);
{
 // p x .€Lq+Š
 return;
}

)J^C+-(I^‡m‚FL pictureSurfaceArea() C+ˆ#^‡t


Yj|s
[9]
float pictureSurfaceArea(float theWidth, float theHeight)
{
 // q+Š'/
}

main() C+?{„A}Y&x^‡%/<ŽL‰-^ return [


}Y&x 0[10.10]BNi^C+u7c1<- 3b’Uo main() C+&x
^‡:]v' main() P† "int" [10.1]š:];f'H-Lq+Š!'a

[10]

17
BECOME AN XCODER $¯ [ z 3  O/

int main()
{
 float pictureWidth, pictureHeight, pictureSurfaceArea,
 circleRadius, circleSurfaceArea;
 pictureWidth = 8;
 pictureHeight = 4.5;
 circleRadius = 5.0;
 pictureSurfaceArea = pictureWidth * pictureHeight;
 circleSurfaceArea = circleArea(circleRadius);
 return 0;  // [10.10]
}

float circleArea(float theRadius) // [10.13]


{
 float theArea;
 theArea = 3.1416 * theRadius * theRadius;
 return theArea;
}

.w- L [10] VFBm-z [10.1] 50n main() O/-z [10.13] 50n4


TŒ\O/.YBm¡¬}'ƒ/Ÿ¡¬¤‚‰t’
M-z [10.9] 5¡¬¤
‰`—" ]0&7+g circleArea() \O/gšhrM¡¬¤8v main() O/
†S®Q‚ci‚Pfn" ˜§\X6" )©­®
3¦…wn«<
warningjˆ•G¡¬¤j-= int main() \k _ O/`< function
declaration; [11.1]}D0š>¨"Žz [10.13] 5žs„@
!

[11]
float circleArea(float theRadius); // O/`<

int main()
{

¢Z‡ƒ/\N~'H#*¢u£ L [10]

BmbAjM”™\¡¬}nƒ/9ej(CJ€
M\–‹Ix{y?

ŠBmœ›ƒ/oaªwC^dƒ/Ÿ#M\)%UEq-Bm\ƒ/p0n
rectangleArea() O/“
l L [12] \3}nO/-Bm\ main() O/
R;KBmW-nO/ \ƒ/Ÿ|%‘1}‚e0¥:\,g.2M

18
BECOME AN XCODER .Ün  3 ¤ b@

main() b@´Û–»ˆjÎÚ>l˜-±À˜o«@̑ס´ÝU$×&ŽIi
˜«@JžoLۖˆj\:~˜&Ž´ªœ+Ii|†b@:C˜/®d
¤o}sHo‚*D)ĀÑ}b@o‚*O&¡Ý§U×oLۖˆj 
=¡£€³Ó,'z¶

[12]
float rectangleArea(float length, float width)
{
 return (length * width);
}

>˜hX<¿¡ËoÖ¦^&Ž´A*¦‚* [12.3] 7‰ÂZ²;­


lTu< [10.15] ]/†Zt-€oÛÊ theArea ){~8˜1Í>J<b
@xPÛÊ

Ô©T…<¡¤·ƒEfµob@ypÞK{+Ài¸3[{t•AÐNoY¨
{˜&!‡V†b@vÈÙc(+o«@Ì)€˜WAVÛ¡†b@oxP2O+
oFo¹

Ò^_Ø&!VÛb@oÛÊ9ÁK{+v©.•¼LD¡”Q5ÈÙ«
@oa"¢4a"
&!ÉÇ¡†b@D˜&!<Q5¸+¢¼Lo™m ]
/+˜hĀq½o)A>J]/¡†b@ ¨{¸

 ¡†b@o9?

 ¡†b@oʆÊ°R!wM
 ¡†b@²;ÅŒSƒÏo„!­lowM

<Í^ [12] ¡\¬ŠM{

 rectangleArea

 `†Ê£{‹ÕÊ float†#rs †#rÆ

 ¡†b@²;|†kGD­l{‹ÕÊ float wM&!0‚* [12.1] o


†?–q

<b@o«@̟— «@¾Ø¯_ ºa"b@¾Ø¡{ Objective-C †¥


&go%Ž<¤T…”6Bš¡†F~K{œ<T…€¯e›’ Xcode
Z“F ƒo«@ [11]

19
BECOME AN XCODER #¦V y 4  +,/ Ž

y4
+,/ Ž
?h ‰/?hWƒ4 5E1W…k;a?hGC5vnd`–A?hWe‘„S¥
'K5||00WUA„S¥'/ Ž /~"m?hsH$i Cocoa
O€IWL4NSLog() L4~aiR£.bx/us $*bdAuW„S
"+," M Ž 7žNY˜—):ƒ4

NSLog() L4da}eK¥'¢”ol7 a$K¡ƒ4„SW;a.b


jQH$O?h/"mœŸW$UK¥'?hW„S!u Cocoa B
™t_usH$Bb’ W@ 

§?hKcc NSLog() L4d`–H$

[1]
int main()
{
 NSLog(@"Julia is a pretty actress.");
 return 0;
}

r8_šJ [1] Wfˆ§3 "Julia is a pretty actress." ¥'KP @" “ " †W
3{b39string

q39"FNSLog() L4+,|0¤WŠoJ2&\W‚“ƒ4-
£JK•/?WDz ƒ4 [1] W>Ÿ¡2

2005-12-22 17:39:23.084 test[399] Julia is a pretty actress.

i39=‹N0i3character

›T‡/wKWšJ5 main() L4Wgdf ˆ{+

[2]
NSLog(@"");
NSLog(@" ");

f [2.1] =‹i3
{bX39empty string(<WZ]b‹f
[2.2] G[X39cpK^Œ=iX%space.6~i39WZ]
a 1

20
BECOME AN XCODER '²[ } 4 ƒ -.0§™

04;Go>\4B-J6om\Ž’«HIœgvM³Ck#\„_
l4-.L\9lom\¢%ŒALh# [3.1] €l¢b \n]
94

[3]
NSLog(@"Julia is a pretty \nactress.");

{0¨‡XfrI3 "6e¯\¨-

Julia is a pretty
actress.

0 [3.1] \z¤šd~Šescape4$@‰ NSLog() K5 l4bq(


I-.L§™ \48b6omŽ’\40&H "n" ] "‹Q9"

0cGyZ xg.lz¤L§™ €2—bls­3Xl<0z¤


_i\46omŽ’E`žp.lz¤OCk"g0z¤\^i
F˜ b_iV‘!lz¤?€@‰ NSLog() K5€l}
lz
¤+? ®1I\€lbg.I\8$\,=omŽ’‚©”gT|S
bl£H
[4]
NSLog(@"Julia is a pretty actress.\\n");

h# [4.1] t9_\‡Xb

Julia is a pretty actress.\n

L)^dCk"6±*PR\4;{0³CkD–›_\‡X.L§™ 

[5]
int x, integerToDisplay;
x = 1;
integerToDisplay = 5 + x;
NSLog(@"The value of the integer is %d.", integerToDisplay);

¥YŽ0a“Ck6l4;l“l° /š€l4;A G6
¦\W:%d…—z¤¡74 % 6o>\Ž’$_i•ˆl d deci-
mal number \ªŸt9_0¨ %d U0\<‘u† “_\W:+
?°  integerToDisplay \jt9£H [5] wL

The value of the integer is 6.

g±*n¬ x%Œ( %f N %d

[6]

21
BECOME AN XCODER  B d 4 i !"%…{

float x, floatToDisplay;
x = 12345.09876;
floatToDisplay = x/3.1416;
NSLog(@"The value of the float is %f.", floatToDisplay);

Q&.C)Y€( €‰MCh ;4@`'ArQ9.C)Y€(


`ˆvQ3 .2 ?: % ~ f qjzUg

[7]
float x, floatToDisplay;
x = 12345.09876;
floatToDisplay = x/3.1416;
NSLog(@"The value of the float is %.2f.", floatToDisplay);

mMu`Dx'/TƒR} M`
fsrQLX€VG\rzXo~
tK‹kG'A`Q|HCg5€V`s1b%9Ž C€VwZ)p<=C
K`% % ~ f q>F % ~ d q„€8N=gXKl+'A`N=
CK€VCK [_sa€VCK

[8]
int x = 123456;
NSLog(@"%2d", x);
NSLog(@"%4d", x);
NSLog(@"%6d", x);
NSLog(@"%8d", x);

‚7 [8] )p'C†

123456
123456
123456
123456

%‡9XS [8.1, 8.2] 2WJ0nQC€V6CEq @OEqje,


^Š)S [8.4] N=CKgX€V$*2WP:ŒCEcGy
COI]ngX€VCEq

#[N=QCK~ €C.€
O-C

[9]
float x = 1234.5678
NSLog(@"Reserve a space of 10, and show 2 significant digits.");
NSLog(@"%10.2d", x);

22
BECOME AN XCODER ‹B _ 4 b "#%‚u

peKŠ &= Q:!,]$&vG.CyOJC [10.3]-J\k{E)


pC5 %d w %f 7z>sSG.intfloat

[10]
int x = 8;
float pi = 3.1416;
NSLog(@"The integer value is %d, whereas the float value is %f.", x, pi);

t‰yG.5{C`qJHMKC'@\4_ Q2„
_ QTdA
{CŠ 6'

[10b]
int x = 8;
float pi = 3.1416;
NSLog(@"The integer value is %f, whereas the float value is %f.", x, pi);

h
"Cƒ
The integer value is 0.000000, whereas the float value is 0.000000.

^%j…Y*3PC_ Qf(c QX†w Qrg3PCf(x‡ NSLog() aQ


8(mnVD3P0i/FC{Jx‡KW93PCf(k0i}ˆ
€l import1 NSLog() 8(Cp8(R~5 NCL

#import <Foundation/Foundation.h>

aQLkJ3Pf(C_ Lp3P4%b9C;)?+<% UI


3P[9
NCf(|3PZo% bY*

[11]
#import <Foundation/Foundation.h>
float circleArea(float theRadius);
float rectangleArea(float width, float height);

int main()
{
 float pictureWidth, pictureHeight, pictureSurfaceArea,
 circleRadius, circleSurfaceArea;
 pictureWidth = 8.0;
 pictureHeight = 4.5;
 circleRadius = 5.0;
 pictureSurfaceArea = rectangleArea(pictureWidth, pictureHeight);
 circleSurfaceArea = circleArea(circleRadius);

23
BECOME AN XCODER   4   

NSLog(@"Area of circle: %10.2f.", circleSurfaceArea);


NSLog(@"Area of picture: %f. ", pictureSurfaceArea);
return 0;
}

float circleArea(float theRadius) // 

{
float theArea;
theArea = 3.1416 * theRadius * theRadius;
return theArea;
}

float rectangleArea(float width, float height) // 

{
return width * height;
}

24
BECOME AN XCODER ¸J s 5 v ¤¶œi.)

s5v
¤¶œi.)
8[DQUH CK)£ ”TM/´Wl¬K'¯|™´->@
– ¡%¬1T™nK Mac ->y<®nK Mac ™Tµt_\dcK
)›U¤¶§compilerT$9nK)£±z* Mac Hfi.Ki.£aHŸ
KT Apple K2„ Xcode )uY­˜K­n« Bª Mac OS X HN

K!š(Ž% Xcode1T{¦&0¥¢Fn+wŠKJnm
http://developer.apple.com K…}L‡# “DŸX2„ƒ*U‹^

r$pg Xcoden$ Developer ’`6 K Applications ’`6 :DŒns


,pgKa]‹‘hnAh²¥"ˆ?A•uK©†=+³P-&In‰X
K~Sªa$ Preferences ;·[XeK…E¥m File ©x©¨ New Pro-
ject\5jb´3qxK™€‚€y‹r

Xcode ž4)¹nR Šjb

8[XB Objective-C R \Ok°x=+ GUI—7BLVZGraphical User


InterfaceK)H¥G o©¨$ Command Line Utility K Foundation Tool

25
BECOME AN XCODER ¾P v 5 } ©¼¢k1‰-

zM“lhQ' ¢2˜

ZpQ±"‰-­ c'+G* justatryD®Lcp_"H°,plhQ2˜†



Finish

;bs(_V&Qlh#x¡¬Terminalk1*Op8rpQ‰-#x
¡¬k1D‘_¶4E~•C¥ª§MplhQ' /c^€+0·
/cG‚X#x¡¬Nk1Q‰-'+vc+!ª _ ¦\œQ/›9
[aQ‰-' Tª" ¦+!¯

s(cBZ‰-z`eQpm”nn]KQŒŠ”5s(puS{cŒŠ«/Ici
Y»QiYX "Groups & Files""H,Lw.p‰-QN/´h$S{»@/)
´h3XW–pV&)£AQ GUI ‰-g({šm<KpQ GUI t)£AN
¤_Q´h{E´hywDR,(´h73X*Op‘(žŸ’{E´h7U
”…NµXcode „F{E‹³Q´h7"Groups"Hw¹pQ>f

(»{c'Z Groups & Files QiYq™w justatry KšaQ Source ™wša/


c'Z justatry.m [1] Q´h·jo?c‰-|Ž6c'Z main() QJ-{
‚X6/ main() J-QCc´h(}ˆW;bmd=¿6;b‰-Q‰-¨
*Opº²Q›% justatry.mpm”‡scƒ:Q½Apple —ZpV&
 main() J-

26
BECOME AN XCODER 7 + 5 - 451(.

Xcode 6 main() 

[1]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) // [1.3]


{
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // [1.5]

 // insert code here...


 NSLog(@"Hello, World!");
 [pool release]; //[1.9]
 return 0;
}

"",&.*2) * "

  NSLog() /3# import $  0'

 main() 

 
%.7 !0

27
BECOME AN XCODER ,Ē{ ­ 5 ´ ôĎä£G¾B

 “ÄÖ.i¸1[’\[’|¾Bòv=b

 “ NSlog Ž(.i=ûß 8“AI

 return 0; Ž(

ĂCe¨æ¥|xH

 j“‹ži…C÷|ìU= main() lB|ˆÔÇ [1.3]

 “/ NSAutoreleasePool Æo|Ž( [1.5]

 ')“&S pool ä release ²j“A|Ž( [1.9]

Þ[içÑ[OŠ“đ~–¡@O~Á[‹|¾BòՐ$â[ñ§|Ž(ƒ

:[ċ†·ÍªÏ|×[ÕÍCă»ZÞ`ý²·‰Šé[‚Œ5
XÆ×Ċē¨ñ§ "lB" ²“Ðr@E¨ÍDĀm>ÌÐr¨Ó}Ùl
B‰“.i®Ć¾B|z^“¾B³èŒ“ main() lB!“lB€¥‰é
ðîºF[+Étæ«=`CüzV6Öď¨=óh [1] ‹m|sCxH[™|…
uá+Ɍ_¨5í–q¬²eŽ(·‰ [1.31.5 ä 1.9]Cek"Čw Objective-
C åa|xH+É5ē¨ñ§²î¨šëêą¶|¾B?—•‰¨Ó¹Ûj“
Tč|´Ò© i| “´ÒĂĔą¶|†[’Í7øÚmeTč|xH

@y¨™|`CĐm4LÖď·õ3|×p ‰ą½|àŒJw main lB|


쉦¯ãú£G²“¾Bsè|¨|¾BÍM.œùĒѨ|¾Bf.VœùĒ
†k*|¾BÍˌ.*OŠ“¾B±”˜¨sè|œùĒ‰¨|O
9|ă¨f.VœùĒ†+ɤ*ĄĂ²·‰bj“C "pool" ²“A|
Ž(=¢|d

ē[’£G Apple s¸g|¾B [1]ö‡ ï1Š Build and Go |­ “ÎÿÝ1i„2


buildRôĎ compilec£G²“¾B

Build and Go ‡Å

¾BÍ°£GFÀyÍKþÂeĉ)|؝ž8= Run Log ÿµ†GçÙ²


“¾BÓĈÆexitedR  stoppedc <Ê 0¨‹m|ܲ“‘·‰ main() lB
s<Ê|·@9[’=­ ´ [7.9] s¸m|î;E[’|¾BÈQ£Gmµ
†Gc`C¸‚À]m0‚ŠÈQ

ē[’<móh [1] c‹‹@y¾BCŸ›ćͼ-édāhiç[.P|Ž(n


# NSLog ²(N‰[ "Y" % .i1Ž(ÀW|Ô

28
BECOME AN XCODER ¬Q w 5 z Ÿ«™n4‚.

[2]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])


{
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

 // insert code here...


 NSLog(@"Julia is a pretty actress") //{{;
 [pool release]; //[2.9]
 return 0;
}

^V!xd‚.¡X
H%S Build • d]3S‰m‹+_ [2.9] Uv

Xcode YdŸ«¤š

,Or§
R—% ‹v4–xd†S¨›N

error: parse error before "release".

PparseZŸ«¢b#^7SBs@…>4‚.A¥[Z9’>
4\J8’'d&y"SŠrˆ~D i(1–M import _
[2.1]rˆ~Dd-#\£_Sƒ: [2.8]rˆ~DŸ«
¢‡Iw [2.9] 4g€vBs–2A’l©AZ€+x42Z
+SUax4+xªpIS`^ukZ¦Ÿ«¢“„^~D/S)|
6ZxC)|?p–hSl©/W˜ŒS}_L)|S5Ž ?pZ‚.h¤
šS*¦jWtT

¡‘ Fexdl©A$0n4‚.œKo”7

v+­<c=q zfFS‚.G Apple ~DS‚. [1] pIžE [3]

[3]
#import <Foundation/Foundation.h>

float circleArea(float theRadius); // [3.3]

29
BECOME AN XCODER B
 - 5 / =A:*1

int main (int argc, const char * argv[]) // [3.5]


{
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 int pictureWidth;
 float pictureHeight, pictureSurfaceArea,
 circleRadius, circleSurfaceArea;
 pictureWidth = 8;
 pictureHeight = 4.5;
 circleRadius = 5.0;
 pictureSurfaceArea = pictureWidth * pictureHeight;
 circleSurfaceArea = circleArea(circleRadius);
 NSLog(@"Area of picture: %f. Area of circle: %10.2f.",
 pictureSurfaceArea, circleSurfaceArea);
 [pool release];
 return 0;
}

float circleArea(float theRadius) // [3.22]


{
 float theArea;
 theArea = 3.1416 * theRadius * theRadius;
 return theArea;
}

float rectangleArea(float width, float height) // [3.29]


{
 return width * height;
}

!@)4;,7.(1 29' main() # '  cir-


cleArea() [3.22] rectangleArea() [3.29] "?0'8  ' 
main()  [3.5] %6 ' main() B 1< Apple 3' 


51*$'+& > 

Area of picture: 36.000000. Area of circle: 78.54.

justatry has exited with status 0.

30
BECOME AN XCODER ~ 2 L 5 R m{fF&X

bX }Inx
}IzEw"!CAJ`_<X F&C)QW
h*$ Xcode O*}IB0<J_<4d}j?3=6>#%yDMt
Xcode T`U@ " ut"breakpoint@v#%3lse5

J3X k N-@ ut

o1]JG`:-3=F&6;,}j3?"PHJ`g<( ut/J^.
p3=37>&

Ko9|38Z ' 3L@as8\ /V7T`!@rSc+

Build and Go i rSpopup menu

rq Build and DebugJ`;, 3[Y

31
BECOME AN XCODER … > \ 5 _ x€pS%e!

Xcode debugger †X..@S%e!1mJƒv

^Pe!TiS%A6:k\P {z <XHJ /@M=XTJ6Pƒ


v@N'#V P {zE]78,ƒ@NiK$4„LS%y3
Continue Ff^P debugger GPU
@ 5ydh?4wW

*O["9"rL@;&utQ}pS%|`@ Mac OS X e!

<X nq(l)3CIM@e!X[RrL(@2YaGsX@
Objective-C B~†Xgc-o@Dl)IMe!Z4@bP_j *OaG
L(^20E*Oi+ GUI e!y‚

32
BECOME AN XCODER }? Z6`X I

Z6`
X I
*MLVHV@d(v%[#EKX M U,S/*E5N0@{z'aD9n
)^Ku@ [1.2]

[1]
int age = 42;
if (age > 30) // [j > A " <"
{
 NSLog(@"age is older than thirty."); //[1.4]
}
NSLog(@"Finished."); //[1.6]

Z [1.2] ,Y if... B]pFX BVG:o Cj Cj@D


*i Cj@|yq(f=F trueOM HU,@;*d(v%^k&=X
age > 30 )3s% [1.4] ,@'-ah]"9.Dcx^KX )r1%Z
[1.6] ,@'-_h]"9$F% if Tg@ Cj

2JPhb7\BDiX )M;HU,@^H6 if...else I [2]

[2]
int age = 42;
if (age > 30)
{
 NSLog(@"age is older than thirty."); //[2.4]
}
else
{
 NSLog(@"age is not older thirty."); //[2.7]
}
NSLog(@"Finished."); //[1.6]

%I [2.7] @'-*%X )M h]"9+^4 Dw8 [2] @W>

RI [2.2] @ <[jQot'@lmq


_!Vm

== e<

> <

33
BECOME AN XCODER #ÅT Š 6 ‘ †(h

< Q

>= QO™Q

<= QO™Q

!= ™Q

´v<w ™Q¨­ - `In™£ Z‚rR-c@{7¹ n™£LV


`p0`^K¨­ -6¢€n±^Kcanl`·fX¶W°‡Ÿ®
«z¾V˜2²V‚Dq-ˆ. »VMHA›©¢.–¥`>d™Vto@{
%In™£

§¨­ .ƒgi³:h•5t[4%¢`
‘V¿;k)Amg)„|
F"Hy¢%JV if hNµ

ÆAmŒVee9§(En§¨­ ¢.InyN‰$nšS
` truex”` false~

. Objective-C true ® false <ŽY&c 1 ® 04¬,c BOOL Vvu¦s?


ªƒ% HY&FlgY& "true"ƒ°3 1 O YESgY& "false"
ƒ°3 0 O NO
[3]
int x = 3;
BOOL y;
y = (x == 4); // y ¢` 0

1S¡g+tºb/n†(C¿`9V1S4/QnV†(!ž*3'
´G%ø AND `In & ‹£HY&&&1Sg8n†(3'=´
G%ø OR `In | ‹£HY&||

[4]
if ( (age >= 18) && (age < 65) )
{
 NSLog(@"Probably has to work for a living.");
}

gUVB†(h½}H `9V¯g¼“VBn†(hPJn†(h
V _£=k)’jV†(¢)ŽÄÀ1S3'¤jV
nh¢…œŽ
ÄÀ—\]Á


[5]
if (age >= 18)
{

34
BECOME AN XCODER   6


 if (age < 65)


 {
  NSLog(@"Probably has to work for a living.");
 }
}

35
BECOME AN XCODER %²W y 7 ~ H& while Ke¨d!

y7~
H& while Ke¨d!
M'[bBhumXQ6†4¥F!d!} r:7Bh­Š17NL
4Ke¨r:L4X†4¥ [1]

[1]
NSLog(@"Julia is a pretty actress.");
NSLog(@"Julia is a pretty actress.");
NSLog(@"Julia is a pretty actress.");

>@Z28"…¡ce¨XN6ljt¡cr:P1!d!£79€šQ6
X†4ŸG¤Objective-C ‚IiVK˜M"

2UtY—|id!P|zd!ce¨r:X7£tš¦J [2] ¤­Š0


for d!A|i£3K^Oe¨X7£|i£3#aª£/bt„Vsip?
e¨«JK  2.7 7

[2]
int x;
for (x = 1; x <= 10; x++)
{
 NSLog(@"Julia is a pretty actress.");
}
NSLog(@"The value of x is %d", x);

0¦J [2] 3; [1.4] Ž{-K 10 7f+x {^Ob 1…]™’Ž&BhR0©


<‘X4x <= 10K‹=w*8l|iw*a5(X/b x ‡S 1Q0
_“Xd!Ž{r:vŠx XgŽ¢0|”a/b x++ |i4 X§`
žvŠx Xgx0a 2 Ž,kK• 10 –/b"… S9‡S 10/8
0 _“ŒXd!Ž,7r:$ x ±5 11w* x <= 10 €,
5(]X
!d! [2.6] a&K.t¯TnqloopˆD] x a 119a 10

oœtŽ¡c ¬XE)9a& x++ K››¢t¡c?X 6ƒtcX4


9v KX¦J [3] ŽC‰\®5°\

[3]
float celsius, tempInFahrenheit;
for (tempInFahrenheit = 0; tempInFahrenheit <= 200; tempInFahrenheit =
tempInFahrenheit + 20)

36
BECOME AN XCODER Y - C 7 G ( while *8T7

{
 celsius = (tempInFahrenheit - 32.0) * 5.0 / 9.0;
 NSLog(@"%10.2f -> %10.2f", tempInFahrenheit, celsius);
}

F;I.V

 0.00 ->  -17.78


 20.00 ->  -6.67
 40.00 ->  4.44
 60.00 ->  15.56
 80.00 ->  26.67
 100.00 ->  37.78
 120.00 ->  48.89
 140.00 ->  60.00
 160.00 ->  71.11
 180.00 ->  82.22
 200.00 ->  93.33

Objective-C +P*8TD7

while () { }

do {} while ()

CP?Q': /<UO. for-loop &S;B%X$5=W,%


X.J,4 false loop .7H
LE@#

[4]
int counter = 1;
while (counter <= 10)
{
 NSLog(@"Julia is a pretty actress.\n");
 counter = counter + 1;
}
NSLog(@"The value of counter is %d", counter);

F;) MA 1.I R6 counter .9L4 11

>( do {} while () 23N K.70"L@#!

[5]

37
BECOME AN XCODER ?
 1 7 3  while (;'

int counter = 1;
do
{
 NSLog(@"Julia is a pretty actress.\n");
 counter = counter + 1;
}
while (counter <= 10);

NSLog(@"The value of counter is %d", counter);

4" counter *6# 11

/7<.52&0@+: , 8> =3 +


%!+9 $)GUI1-5

38
BECOME AN XCODER #ÔY Š 8 “ q4¯?n (GUI) [œ2

Š8“
q4¯?G%^nGUI[œ2
Ë ± Objective-C \Ð[¼@p«=/©”I„ze»b'q4¯?G%^in
GUI[œ2<g@"¥.5NT*EObjective-C E° g´,h C [œ2¹C
[Î6K&`h@pzÆ[‘gϕ[ CS Objective-C ¸ C KP4;r‰
r. "Objective" Žq+Objective-C ‡uKqµhZ*object[U¢¨Q

K&`h@pl‘.ŒˆÀ1—®‚`nÇK[Objective-C $—˜À1[¨
Q)> Ղ.yÈÔb'À1D%ÀÇ­· ÀÇJÀŒˆ pª‚[œ2l
ŒˆÀ1tH0m·Éœ2_/%<g0X‚[œ2gqÍHIºo¿Vœ
2lŒˆ²3¿V†•³a^žžMR^~0‚[œ2gq](¶ˆA‹
lŒˆxÄvÉɖžž e»ÊM~0 Objective-C ŒˆŽFW:w€—®.Œˆ
À1Áϕgc™¦Ž—gZ*[|ÓŒG% Objective-C‚7O¬‚
lŒˆ[Z*[´Òšd¾½œ2IŒˆ p

IjqH Õ@pjjq® Safari ŽÁ Objective-C ¾½[œ2¡g0;ƒ


L[Åjj‚ Mac S¤…[q Safari ¡! B4
qf£k8[gђf
£Sª‚f Žqk8f£Iђq¡t§›$»EMq{smessage
§}ŸŽq¡l-̎q{s¡§9Fœ2ÃIђ 7

39
BECOME AN XCODER ˜F f 8 m W-…7U (GUI) Hq,

W close ^Yh{_ujWvr

vrPWG$agDej WOyPG$aO Vj<G$(“


‡ -v—H5d,2P:LC-HG$R*.•=>!>K" Safari ƒŠ\
zktHG$(“‡ n9-Wv—H5d,

WG$=*jWvr6?HG$=*j<Oy

a”Cb|S-oW Safari vrn-oWa—` Apple Hq,iTXP

a. JwxH‚
c|a]~|SoWpN;&iT)8WvrBI

b. Œ3ˆ‘Etemplate™ Safari ”Z!>M#j<vrG$

€ps[P bVM# <q,’‰Q–4class!>@Pvr


Hš‹0Qbehave€aM#W}vrZ;† PjW–4QaM# jWv
rjW–4K„ WvrHA/%1vr†Ž lPjWAHW†˜
instancen*' 76 P+jWAH†˜‘

40
BECOME AN XCODER (ñn ¥ 8 ­ Š@ÍQ† (GUI) p³=

¡y+p·´À¤8¡ Mac âÐ p~§:l¡S©Š·´®minimizec


Dock ²{ò%…¿¤%À6c‹âÐ P/1p7©}:H—cpZ
}5€©ŠéKgÄÝ4pïØ_“ß·´8âÐ pGÃD©ŠéKpÎñ ±}
©Šo,wÎÖà@©\ïØpˆ5BWŠ·´o,«à@©\ï؈D1p·
´o,hà@pï؈‘DYÀ2E1

éK[$}y+·´o,åò©Šo,<daccess%"›FpX0™J©
\™Ja±} closeè¬Á¡|
Š·´p "è¬" |»©Š|»À½–
close ©Š•ŒµB·´o,Šo,"›Fp™JӀmmethods±Ì¡À
‚cp%‰eb=tŸzÌh:l¡ÉȶR‰c©ÆÞ¶])%‰À€
¡ž_9Oæ

8©ŠéK€¡y+·´o,{%ÀuŽ“ßñRAM_ä<©Š·´pGÃ
\apǕ²D%À€è¬©Š·´p³=ÚJ-˜'ZÏËÅp“ßñÀ
}ҍ¹5€©-³=ÚÏWŠ·´«}Ùp)_謷´p³=Ú$׃¤
AI}WŠ·´o,«ƒ<dìk©Š·´éKp³=Ú

:1v†‚cp¡8'­‚cp³=Ú²À N\uŽ“ßñÕëj%‰6X¦p
D±Ìvs*ÊpqƒcU{†p­ÂR‰À¢”©Šº¼êçiÑ

R‰ƒ_¯ªŠ³=%@`Š|»buttonŠ;íGtext field:l¡
|
Š|»ŠˆÀã c©Š;íG:l¡|
#Š|»;íGw
Àj #ŠˆS%¾>Šà@`Š|»x„Ôp„ÔáÁ²&¡ÞpU
9¡"Tƒ:Hy+Š(p„ÔáÊR°îVV_

R‰ƒy+p³=p’Í

:lR‰³=paŠ|»¨|
%À–Š•Œa Nhƒ›Fpmp3
Ó%À¨½–µLµÜf8·´pZŠ^ close •ŒÀ½–µ©Š·´o
,%}·´éKpŠÎñ5BR‰¤8׃p}Šo,D%œ ©`Š|»£
?•Œ[M¸;íGo,!ð*؈

5BR‰‡.ƒy+R‰EpéK²{y+Š%pÎñ©Šo,À}©\|»•
Œp£?rۚC
†p’ͱ̷´o,ÙR‰pÎñ}Šo,I}Õ·

41
BECOME AN XCODER "¿ Y … 8 Š n7¤Ck (GUI) [5

‘Z* -[e~;‡n5[roDm0´¦ h NDm[¥¿40U Mac


[y±¿ 

žDm[¥¿‚6N&‡Mnc–S{L[zpa°ž[Xœ†~;‡nX
[5¯e=U»@ :]¥¿!G ~;‡nXœš{nzp“3½=
Z*|3½=Z*[.3zpš©\'5message sending expression

K[A¼U‡n3½=»@ fnX[.3 ‚6N‡nzpa


3½=Z*€œ~;‡nXDmi‡n3½=u²†c[c–L¾'®l/
9zpš©\'5 AZ*.¨X.¹7n‡n3½=XSœ%N[
®®l

0Dm5 [Z*˜Q9zp)Ž[x¤

Pe0 Objective-C 2>š©zp[wv5[1.1] F7®: [1.2] 7

[1]
[receiver message];
[receiver message:argument];

Œ£0Ej hN[,ˆ[V<‰T0dŸ :$_ 8[Ÿ†


%Lž?‹a’0dŸ ‚6Z*+­ak‚”[eX[.32W‡
n†O[X«iR1nl^
™iJm [1.2]

ÀDmhh‡I¥ª eb¬¢?[ƒ} Xcode H`(n›sµ³ Application 


[ Cocoa Applicationa“[sn.3c§K[ GUI 5.3·  ­
3#—¶0„[ Xcode •‘ [ Groups & Files tg — Resources ¡qB0
MainMenu.nib º¸Double-click

42
BECOME AN XCODER w: Q 8 V F'd-E (GUI) <Z&

# Xcode spqH MainMenu.nib

(GFZ&Interface BuilderKcNJm\S$][<OMIcaDL File


lWl5 Hide OthersMKcC4F][!B "Window" <][AMZ&</=K
cC4<]['r 6MIcaDjk< # "Window" ][<t'
F!gA "Cocoa-" _n<][AF#M< GUI 6'0/<;<`X"

RgB "E9]["palettes windowi@TF][< 2 <QFd.


7P1F@^4 GUI ][ "Window" @E9][ , <QF@^Y?u+<
7PF'\ "System Font Text" %<%v)4 GUI ][ 

LE9][7P GUI ;4MoZ&<][

#f?LE9][7PF@^4MoZ&][<TFJ,c>Fb<@^;
.K84M<][TFJ,e%v)3*MIcDLE9][74M]
[<;
Uh

43
BECOME AN XCODER (Öe ” 8 ™ {8²Fx (GUI) g¢6

¿b«4`H ½†‚2xa¦£g²+ ¬8{05Õ+TS4 NSButton Z


NSTextView—Pq* Apple [žRgÐB0³2'™¡nGzŠ!tV4>IV—P
ÐBgc—PqGzu2¢6ˆ<&·g‡@[·ug

H]“V¦£ "Window" gf-3OÀÅ$zVÒ‹Á­g 9{gÍ


Èp©f-T|J$ xg5GE2Gz¤L—{‰n„Žƒ
—{xa¦
£¯4>HUgf-Vg¦£

uJÔ{f-gÓYproperties¿ÆW$np
command-shift-
i×Gz Ttt$ÊST¶ÆW¦£ "Window"!2%
Mg¦£g In-
stances ytV$•ÆW…TOp
command-shift-i4`2Ãiš´g»6Ɯ
pop-up menu ½¥gq Attributes!H Textured Window ƅT—¬×g
¦£Ô7jÓ#Øbrushed-steel look—h+!ºdg;w¢6g#Øl)¼
¹.><¢6¾

Gz2 Interface Builder g¦£~Îq$gÉÂÄinspector

±k¶gGz’2uTm,{ÐB?q2ªXk×GzK‘ ËttÐB
qo¸°@g

rs
¨g¢6–v@4`!Q)B®m,3g_=:);ŒÇªX¼
¹[8g_=Tm,;g¢6NŸÊST¶4`um,{8€Y
 „g¦£"·u Ï^—PYg¢6¾C!:·ur[8Ug<r
behavior4›ZϘ¦£T¼¹¢6¾Ì¥m,2Bg¢6–v}®D7g
_= ŠA§gÑ\inherit$[8g<r:—q× Objective-C µ C 8[/
g1

44
BECOME AN XCODER ,Āo ¦ 8 ¯ ‹C×Oˆ (GUI) q¿A

ª?I˜aqÉÎC‹ÃÀûKNSWindow<ZFŸ' æä‹üj
G*qûK—©£<Ÿ$ ]HaŸqÃÀûKF͟qÜÃÀBa
"close" ª‹’Ë½-â\eŸ[TC*æä2I¿AéF TC~WZ]¿A
éaŸqûKšø²?lª‹ÜÃÀqûKTC%N€‹gmq¿A骋
’ËG™Èߪ‹ÜÃÀûKiüjqûK*q "ûK"superclassF—?
á…qѪ‹™JË}þÄH
&raRaª‹mhsaÓª‹üjĀU
hierarchy of inheritanceq±°÷

?lª‹mTCRaŸ”#q’µ»m¨§¢ªµÕ…SŒY偟q®ï¸
í„çL^ŒYåEõ TðmóŸ<ªÚ n
Objective-C ˽#sig-
nal‹òÝerror

?lŸ…‹ÎüjGûKqmØJimplementŸGqH…{âðxø
²Ÿ' ùäoverridegqmô_`ÞŸ' æä¿Aéā|
ú­|Å
ŽË<Øàú­ÃÀv4Q*¥a'Ãê´)ŸqÜÃÀûK.`ú­ÃÀqmË
d Apple gÏqZ‹^.‚8q9Û:D͟qÜÃÀ¡Ba‹ú­’Ž¨œ
HqmËŸqFt Apple qZ‹i £<ª‹ÃÀË4¥#Ãë)¼zq¨
ú­

ãqú­‹ÃÀÎ/ Apple ©†>žPŠGq close m«PŠ


¼' ³“invoke/PŠqûKiØJq close mö¼*á…÷÷8qc
(A èuPŠGq close m˨ߕrecursiveqc(
[2]
// .`QÃÀ¥a'ê´)q¿Aék<D
[super close]; // ^.ûKq close m

ª‹«3Ùª+îÿ "FVÔÄÇFPŠ ºyŸ‘žª¾¾¶Hµ‘Ð


*

iCûKq±–÷9 "NSObject" qûK¶5«Ÿ¹Îw0h^.qûK¬r¡h


Æ¡q NSObject q ûKsubclassô_`ÞNSWindow ûK NSResponder ûK
q ûKF*+Xµ NSObject q ûKNSObject ûKgÏiCqp1i6.q
m_?¤-‹ª‹p1q@·‡қª‹p1M' ¢ÐÂq’ÁÁ

<P.=¢ì!ŸÊaÖÌvāPŠ`ƒƒ…?Iw0‹ûK

a MainMenu.nib ÃÀ[ñb Classes ‰<¦ýŸËƒa NSObject ûKñ


b*¼zañ²7q Classes ñ²ñb Subclass NSObject;a MainMenu.nib [Ÿq
ûK‹>9@PPqf9 "MAFoo"

45
BECOME AN XCODER !§O m 8 s _4Œ>\ (GUI) Qy2

U& MAFoo ¥<

MAFoo ~QE_ ”1"R My Applicationhœht/xN¥<+9W


 h~J•”h6Qž$y2?^U¦h ž‰p–: vW›HEK_1
"$D:XhL4¥<QS ;‘l4Q¥<+x#—Zw5˜[$
NS,XVdƒ¨hjkNS W{ Apple Q¥<B$QR NextStep …
Apple } Next, Inc. VNextStep p_:„Anv3X Mac OS X Qg¢5 Steve
Jobs Q-¡TWa™

. CocoaDev Q wiki
=(ž‰ ;QFSQiuhž‰.›šh6Q
Sb)ŽY http://www.cocoadev.com/index.pl?ChooseYourOwnPrefix

U&_‚¥<bh{Q+1ž‰[d€‹¤Mp_P'Q4$ŠeŸCD
’?^†YG. Cocoa $DR|zQ¥<oI+X NSWindow_C W
$DR%£7Q¥<oI+X NSColor.?^QC ?^``U&Q MAFoo
¥<.pˆW$D’NP'.y2W08r.fQpvWX“?^{QW
_@4c<‡Qq$+1

-G Interface Builder˜›H Classes ›uQ Instantiate MAFoo v0*h. In-


stances ]YGQl.h4_+X MAFoo Q‚Œ%p_Œ%R?^``‚
U&Q§

U&_ MAFoo Q§

46
BECOME AN XCODER !Ä W } 8 … i2¡=e (GUI) YŒ1

>hY A`c]%#GtrmY_”N>hY MAFoo X&•Y‚Ž4


>h c]%i# MAFoo X&N0Á7Y‚Ž,brmy™~–ti0
Á7X&/TiX&C2iMX&Ywšreferencey‰V–trmi
X&½-_”¦>hY MAFoo •]%‚Ž>hˆI4_”i£>h MAFoo
X&YwšH"iwši_”‡–trm>hY MAFoo X&*«Y]
%i#>hYX&Ni0Á7Y‚Žy\Z‹trm^Z

Å>h)¸‘3iŒ1c9YF|›_”~_ YnjBi_”„o´pQ
Yv9tirmM ;Rcx6Y MAFoo ¿:VY+¥irm™t>
hkk]%Y MAFoo ¿:Y¢ÄMAFoo X&MAFoo X& DEC2;“6iv
9YŒ1®8` MAFoo ¿:2,4i–t MAFoo X&YrmÀ‹trig-
geri FAFoo ¿:YVK9a&F- J –tirm0Á7X&Ÿ
Birm«;iVY+0-iJ ži0Á7X&YVY'u
`Ã$igig™~9birmYƒ(5¦0Á7
c†sVY+¥s
~–t

>hY¿:¨cLiv9Vh™~LiX&P4º¨ci
outlet`iª"Kq³liX& ‡`i0Á7X&`Rc–tr
mY£’

­Q- MainFile.nib ‘Y Classes f MAFoo `~·OsKYŠ^-{Y»¬


_
command-shift-i K?i¿:Y inspector ¸±²zNµ¤
- inspector ‘ 
·O Action fE¼· Add _”K˜©iv9action ‡`VN MAFoo ¿:
"i@2—œY+0¹JK§{¶ "setTo5:",b>hc€diV-
0Á7
Ã$ª0 5KO# Interface Builder RˆIY €+¥˜©iVE
i+0J/ "reset:",b>hc€d-0Á7 Ã$ª0 0°U—>
hYV+0„[":"Ž<^>h™¯N@.¾SiYF

47
BECOME AN XCODER e 0 A 8 D >S" ; (GUI) 2G

OW? /+ MAFoo a!

@ inspector KH ^, Outlet <OW> outlet (J>) "text-


Field"

OW> outlet + MAFoo a!

4*>1M2CI 3#=:J#=2*>6LNQ27FA>6L
8::'#=2 MAFoo Teb dX 5#=E$-9 "Set to 5"#=

P[R:%c6L2\V `_F5]O2Y2#=$
A>6L-9 "Reset"Z.NJ#=26L>>!2B>&fU#=2G

48
BECOME AN XCODER „ = W 8 [ N'q/K (GUI) ?_%

%O+zn*(23 FJ?YF!G0M-T0M?4@HKsXv4@(
2Fuc'gm?

V"0M lj\#JrxB?Za

a) "Dd "Reset" w MAFoo r„f

b) "Dd "Set to 5" w MAFoo r„f

c) " MAFoo r„w$‚)f

JBZa" MainFile.nib b`  Instances L^CDS€y ? Control €3


ipR Reset Dd96 MaFoo r„  JRI? 9o5}t QhV
UAYNZa?{z8YU{FDdE6 MAFoo r„^C:eip€

1NDdZa6 MAFoo >

kS:eip€CDd? inspector hƒNZaK; K MAFoo > 


?P*<~7|k?P*
]F "reset:"^C Connect Dd5,&Za_.

49
BECOME AN XCODER 
7 Z 8 a D{& A (GUI) 9f

 inspector
;_i

W^D=m:ID}'C MAFoo 89Ost\=Gr( reset: JEp


Lj

TW…9f%( Set to 5 =m_i. MAFoo 8

@ MAFoo 8€!o;_iS MAFoo n1*=k control 4Y.^D


!8Š Connect

.3N ‚0qczTMr?.9T uh6;Qf‡Œe|


_ `)„ƒ

†2 MainMenu.nib lg
MAFoo >ˆ/K,9e<d. Classes BT‰wr?
.DŽ#9Vb-
MAFoo Ž#>\ˆ/K,9U, Classes ˆb
ˆ/
Create Files for MAFooe< Interface Builder rPT@(X,9‹H5v.~
9"
[y]r(^+‹H5.'Cf9RHxF$
^>'C@9

50
BECOME AN XCODER E  1 8 4 )?' (GUI) !7

$ MAFoo D/7B

.-6 Xcode-,;-!+*98%3)!C*5 Other


Sources <2='$3!C*@A#
")D -:&!>
 (0 Classes <2=

!C*; .(! Xcode +*

51
BECOME AN XCODER ŽA b 8 e S%x1Q (GUI) Ch$

2R|W!<b 4 e "42R`Z ;$_†Y^;$E [11.1] oKz


yŒ€C‹8/kvPqt<T5@*d9SƒXC:c= M
MAFoo.hKS}ƒheader file:0 ˆ?2R‰.Cs[…78{
_qga:%) [3.5] rQ0% NSObject dS#d)CpIK2RC‰.KŠ>(
NSObject ‰.C

[3]
/* MAFoo */

#import <Cocoa/Cocoa.h> // [3.3]

@interface MAFoo : NSObject


{
 IBOutlet id textField; // [3.7]
}
- (IBAction)reset:(id)sender;
- (IBAction)setTo5:(id)sender;
@end

_O<" [3.7] %S#+C outlet"id" ECKB"IB" E Interface Buil-


derfK_8Gd5h$~Ch$

IBAction [3.93.10] i? void q%,@*qcn!jg\dS[VCB"2


Rh$CJm q MAFoo B4^<yJm[VC!‚

_ O<4‡%9S Interface Builder Actions

F2RO<uCK #import <Foundation/Foundation.h> ' Kw [3.3] )CU


FDKj3%x1NQCh$6HDKj%x1NQCh$6

a"2R„L b
SƒXMAFoo.m&2R-lC^<]h$~

[4]
#import "MAFoo.h"

@implementation MAFoo

- (IBAction)reset:(id)sender // [4.5]
{
}

52
BECOME AN XCODER £J h 8 n [+ˆ6W (GUI) Lu*

- (IBAction)setTo5:(id)sender
{
}

@end

X!MAFoo.h •ž}i|%,˜ ™M…}†E=H/jC}iœ
A[Ireset: ‹ setTo5:ZQ7ZŸ4LII‹D*S2emU8eL
u*—GE
P‚z&7ZLu*€[OyiO]}{_[^\weL
MAFoo K@U:b.C[I7Z URj=`3’‘ 1u*—"lU
3L<q+& Interface Builder Œ3Oy‹ MAFoo KzLkvt-7ZL–U
’‘u*—¤ MAFoo K{_^\E)¡0%,7Zr?V [5.75.12]

[5]
#import "MAFoo.h"

@implementation MAFoo

- (IBAction)reset:(id)sender
{
 [textField setIntValue:0]; // [5.7]
}

- (IBAction)setTo5:(id)sender
{
 [textField setIntValue:5]; // [5.12]
}

@end

q‡eTEL7Z{_[^\w textField outlet FaLK%R7Z >


 Interface Builder 8j[ outlet kvE‰ŽL)¡0%,7ZL^\q}i{_w–
LKj[^\Q[IL$)setIntValue:[š““YI setIntValue: 
&)¡0¢[š““Y&n7Zc5xe7ZQ(19Ej[IL

g&e ~o'U˜ eLu*;f`„d”& Xcode L B#O Build


and Go OypNj[u*}g&›Š-e sƒ

53
BECOME AN XCODER 6  * 8 + $/ " (GUI) ,

#,'

5
)%%.$(&,) 0!4 21--
,3

54
BECOME AN XCODER ¬O q 9 v z;¨7N

q9v
z;¨7N
)Sv9`žENsaK29`0•”DaNQ¬6W9`
a Apple I|AQNsetIntValue: W)+©3P"«!–_QN6Wn[
*5;EsaQNG

›h4JnQ=a Apple xtQNnu’[%0¦•”#5€,


š.f ˆ<>-g¥bug-free(.)r\n0QNS$R
¤c†XXZWW‰-/œ'QNWT_mQ

) Interface Builder *Ln:}—ke)]MƒQP" ˆ-a —ª‹


C£BC‘*Ln:}—ke)V…Œ! nˆZE "NSButton"*Lnke)«!Y
''System Font Text" Q+©3 nˆZE "NSTextField"s@=auWa¨7&
p)­9`CZZ NSTextField ¨7-“QN

„ Xcode)¡y ¡F Help->Documentation)§Q^d¡F Cocoa U)‡


z©3  "NSTextField"›™H API-Search ˜,W¡FjCQl
]QŸŽ
Œ)n§  QcboyQb¡‚L{ˆ§~T8Qn{ˆZE NSText-
Field p)w ]

¤¢ NSTextField I)Q?1¨7Y ClassC­ NSTextField ¨7QŠi«!)


Q^
d

55
BECOME AN XCODER | < W 9 \ `-u*;

 Xcode ! Cocoa j8 oz

IPph:e2>CYLu*Cv7(1.>u*!@^BH>C^]r
NSObject Hrn5 QCmt

Method Types
YaC,KGc3`-> +Z>sz fbU,K!Yg- 2,K6kG>
;0!#x)=
{lJEv7>MA,KkGDF NSTextField u*>
?wu*NSControl'"9,KS,KdvyqD>u* NSView
&uRE6%>[C HTML N$6,KkGr {! Inherits from T_
># NSControla{ NSControl u*>iO

NSControl
Inherits from NSView : NSResponder : NSObject
PF2,K
VLu*!;T_ ,K:e2L mt

Setting the controls value


/C,KG>0X4LlJ!YL mt H,K-2

– setIntValue:

56
BECOME AN XCODER ÖY Œ 9 – ™CÐ>W

Ó~Kh)‹SBwKnq
[ŠtÀËÈ setIntValue: “Ÿ

setIntValue:

- (void)setIntValue:(int)anInt

Sets the value of the receiver’s cell (or selected cell) to


the integer anInt. If the cell is being edited, it aborts all
editing before setting the value; if the cell doesn’t inherit
from NSActionCell, it marks the cell’s interior as needing to
be redisplayed (NSActionCell performs its own updating of
cells).
-Bw[ž2Bw[ NSTextField Z#l‰3]7Bw¶rÊ xŹBw
!‘xW[»|2signatureqK

- Objective-C sª»"x±ÖWf@[¢P´p²[lÐ>WBw
i§¿Mvoid ^"§¤+$;U9 W[˜~]¦jl¨Bw¤x setInt-
Value: }z  textFieldBw[ MAFood Z#§!0Ñ:Z#H‰3M$;[v¤+
K‘F·Îa-bªiu(int) ^"Õ¹ anInt £lxŹ-Bw[J 
Bw¤ [l¹v 5 R 07wlŹFÇ*6Bw§®M$;Í

4{yrCMÁ¨[WK l4ËAÏ[<l¨‡D¼†‘%#iˆX§¬.
[SÀ`k½

/V‡r…0Ñ:Z# textField ÔN¹v «/;OÉ|„L2—›[,šl


S4”[Õ¹•¯Ì~K¥W º’ƒZ#§4²pÎ[W³
o "1NL2"Accessorsx KÔN¹vx KQ¹vBw ©\­
i] šl setIntValue: Wc]q~Kd°
uԼ

[1]
- (int) intValue

/‡SG‘xW§+¤xŹ*6/V‡rÔNBw textfield Z#[Ź¹


vBwr¤x/
[}z 
[2]
resultReceived = [textField intValue];

&5-L2´WS4[Õ¹•g¾¢‘²TÕ¹(³[ÆôI
Kµ_ƒ›*o‡¶rć-ž2mx”%QÕ¹[‘x€=§¸ÒM:
T>ŽL2eÂ4p'(³[xÕ¹œ7L2(³œ£l‚[
Objective-C ¡8D¡E[g¾W(³¶r-'xÐ>l‚[?7

57
BECOME AN XCODER £ L q 9 w y9Ÿ6J

"NŸ6‚P-X"NJ%ŠuˆH R,>ŒU_T}Ng&V
,t\b^#0ŽŸ6/ ˜C.NJ%Šp“Y

›-B3H "Ÿ6 N "JQ–-X"N%Šu'DZs‹ ŠV "(


R" polymorphismuU¤M•$,t\object-oriented programming*.e
6Na&¤n' [;!O‡nF—™NMU¡H4‰Ÿ6NoK zg
lŽ jN,‘['k2|‚run-timedu_fNMgl…
nƒi€Nhc7u_)rnzŽ't\
?-E-EN
,š=>Œ'8^xvN GUI , *I8^@gl… setIntValue: h
cNŸ6M>A+¢38^N,~' `:,‘W1 ]„’ 
NoK m†58^W1'k2|‚G{M/ ž 4;ouœF<
”NzUM•$,t\NS

58
BECOME AN XCODER "¸V € 10 ˆ awakeFromNib

€ 10 ˆ
awakeFromNib
Apple šbyu‚- :¹y,]&7 X‘2mrxlQC,yX ‘2y
!b,©ž –’ _—‚-IBz6¨„j :X
†‡š$
HjoaframeworkGœ3>i,€ˆX¥F [12] X Foundation Kit oa
E
† =D#YcgŽ´XSvjoaŸb Application Kit\~y
,©ž eJXW'D#Yw‘<„Hjoa‡4@.X¡R'

¹>i+J>iX GUI ‘2tƒ>i,f¹>iX‘2,|w–’Z5Xmk


‹&;,0¶8W' ·%jpLXh

N4 „j–’d´X›s‡¬1,j nib ®nnib [X` Next Interface Buil-


der„[%>i¢fXUr`µP Application Kit XI†(¹>ieef/9
?´P„joaX›s¦J Xcode X Help «‰«§ Documentation

,¡R'–’¦¤L Full-Text Search)¯q`|#Xf|# ¦±­˜Š


¶8X O
³A,X«‰«K Full-Text Search{•¦,˜Š¶8ª Ap-
plication Kit ^_ Return °Xcode ™E”yŒj“TI4('*b Applica-
tion Kit Reference for Objective-Cy™,I?J(„joaNEXSv}‰,£²
Protocols M4ju NSNibAwakening X…“

NSNibAwaking
Declared in AppKit/NSNibLoading.h
Programming Topic Loading Resources

Contents:
Protocol Description
Method Types
Instance Methods

Protocol Description
This informal protocol consists of a single method, awakeFrom-
Nib. Classes can implement this method to perform final ini-
tialization of state after objects have been loaded from an
Interface Builder archive.

59
BECOME AN XCODER ‡ B ] 10 c awakeFromNib

#@1Mv-`NAo!1MDCD nib S rR^= '1M


8t;1MD|![WR!$„*†NL

1iw oyJ3;~DAG k0(DaXzJ6…47&QD‚


€$8md U3;DA 'ˆZ) }Y`9NTHDGFXKJ
D`{Z oEsZ7P6ƒ.xAZ>_ oRR::bzJ,G
o</Z3J#+ˆZDf%V;ZJ-D5

"\!1M
q3;1MJDA1M?zJ-De&2`NA1MDv-
 MAFoo.m [1.15] 

[1]
#import "MAFoo.h"

@implementation MAFoo

- (IBAction)reset:(id)sender
{
[textField setIntValue:0];
}

- (IBAction)setTo5:(id)sender
{
[textField setIntValue:5];
}

- (void)awakeFromNib // [1.15]
{
[textField setIntValue:0];
}

@end

pjgl[DROawakeFromNib Ao^)W=h@pZI;`NnlDjg
R$„*o†u

60
BECOME AN XCODER ÐZ … 11 ‹ h»

… 11 ‹

œ9‰v‹Ÿ:”—[ÒQFÍP¸[ C ²DÒQ‰|ÄL_¿^
*X‚„(<#ŽYƒ¥ !Á›È
±}2D - ʏ¥h»pointer*
5¨6f/Å8 - ­V•N! Objective-C J”3-ˆqF i˜[

ž‚O¡vιg‚[ Mac Œ>‰vι°~ÀÐ[jG]–Š‘JÃ


,‰vι[t

ÇIJ³¾kÏ [r

[1]
int x = 4;

lp€3‚[ Mac ([~ÀÐ?GÉC/‡H![]–g»W‰š


]–iι x [tUÃ,['ž=u(‰Ì ƦH!K[ι%®
¾$n0h [1]»W‰vι[d7(‰¤i intт[ª¢\©(~Àе
p)[]–JÃ, x [t2*X‰vt[d7i long long S doubleE¶µpb{[
~ÀЌ@)

‰vhOh "x = 4" >¹+ 4 Ã,(‰vb{[]–ž‚[ª¢~‰v%l x


ι[tÃ,(~ÀÐ[5†S^§³\© x [4;addressl5*
1JA0‚(‚[-H! x [yw‚[ª¢Œkn ¼['( ¼[4
;g?L x ¬´[t

vh»pointeriv:/Kι4;[ι

’vι‚˓(ιcs·v & JM[4;ÇIJ³pM x [4


;‚p·. &x

žª¢­¯-expressionx Btevaluate[yw™&ι x [t(=u[I


™& 4m­[žª¢­¯- &x Bty™&ι x [4;2aÃ,
V1[t4;iv`"ª¢~ÀÐzO4 [¹+Œ«T–£½`"(xÂzO
[–T–º

‚« s‰ºe9vh»

[2]
int *y;

‰vrO¡v%l y [ι:/vd7l int [ι[4;p(ι y 


Ã,ι x [4; -[Ro§hO x [4;’ y‚p‰º6

61
BECOME AN XCODER `
0 G 11 J 4\

[3]
y = &x;

N=4\E I=4\2Y6Q(*D,41_Z'TI=U

*y

$<PO 4IVTU "x" $<9MCI=4

*y = 5

VC4 "x = 5" 59M1

4\518@>E%:7R_Z1<5:1 "^'(W/E:
H;=)(T_Z 1EX:OBNI=_Z1 "I58E5:?#]
_Z1.5KA1&21_Z<E:&=4\(!8 Z

[4]
void increment(int *y)
{
 *y = *y + 1;
}

L3E SI[+

[5]
int x = 4;
increment(&x);
// F x M- 5 

62
BECOME AN XCODER %»Y  12 ˆ 3<

 12 ˆ
3<
P(_gDm—hP ŠŸ›s`@integer®¥long]®¥floatu
³¥doublek bu³¥BOOL#X+ ˆDmƒ[ pointere
¦Dm_~·P3<string‡nµt 70²P NSLog() O5[to‹P
K‡nO5†Dm,-n3<P¯ž  &nlN˜Œ % ‚™°[v
@¨M2 %d

[1]
float piValue = 3.1416;
NSLog(@"Here are three examples of strings printed to the screen.\n");
NSLog(@"Pi approximates %10.4f.\n", piValue);
NSLog(@"The number of eyes of a dice is %d.\n", 6);

Dm_JG7E3<?gn›s`@N}y/g7nd1['"mfZ*f'
NSString ¶@T NSMutableString ¶@Uc)[€0¼DmN}y‡K¶@' NSString
R

[2]
NSString *favoriteComputer;
favoriteComputer = @"Mac!";
NSLog(favoriteComputer);

|w•€
nj!fdrVš[>f! [2.1] ‰£iKš¹ x{’
–DmaAne¦º¥tDm$‘¢W‡ne¦e.[fpŸ›s`@S f 11
ˆ [2] [j!

[3]
int *y;

DmA©¸«‡ne¦º¥ y B7FPn®¥[x¬»=C0 [2.1] DmA


©¸«‡ne¦º¥ favoriteComputer B7FPn`@g NSString [Z*[x¬»=
CDmL&e¦N^4Dm[3</g0 Objective-C Z*Ž•…\~­±
:f—'e."m[e¦NœP

1g¤‡n7ª[ @ ‚™9f€Q“If/g Objective-C fn C ¡H[


´: C ¡H7";q„3<[5> Objective-C [‡n”3<`@fn
6§[Z*/8g 7Uz@Objective-C L& @ ‡n‚™

63
BECOME AN XCODER %ªW y 12  4;

Iš Objective-C •S4;c“S C —GE‰ jPŠObjective-C 4;` Uni-


codeŽr¡4;9\ ASCII 4;Unicode 4;©(+=—GY4
N3€3.¦q4&Ÿ

ƒ .lbh4;]BJZQ_ ¨ž [4]

[4]
NSString *favoriteActress = @"Julia";

}h_ ¨ž favoriteActress _/o£ªYah<9}h<€`'O[( "Julia" }


h4;X*R¤5Y1

#tZQ }h¨ž)A favoriteComputert€†}h¨ž hf>`


t‚UE¨}h4;$H [5]0b"`h NSString §@Y”ª«Dg€8¥,v

L

[5]
#import <Foundation/Foundation.h>

int main (int argc, const char *argv[])


{
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

 NSString *x;
 x = @"iBook"; // [5.7]
 x = @"MacBook Pro Intel"; // ›D!`‘‡«}$mdpOn’Y l¢ 

 NSLog(x);
 [pool release];
 return 0;
}

s:^}h…6‹-

MacBook Pro Intel

h NSString §@Y4;|–bE¨Yimmutable0b"n|iE

tniE4;7š2{PŠ•?ŒFzO˜niEY4;“kT{wR
tY…6ˆY“CK” tM' Objective-C OœtY…6lt‹„x~
YuV tJ™eiEtY4;

64
BECOME AN XCODER £Q s 12 x /8

„{3gbpXƒ’]cAS/8*43ŽŸ;5pNU"S/
8R$TXcASva]JSŸ;X NSMutableString Ÿ;>`,x|Vmƒ
i˜J_%¤>`–LpS–ˆJ/8XaR$W{`XR$>`y
kjf~`œGH‘>`k length jf~a/8R$ [6]

[6]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])


{
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 int theLength;
 NSString * foo;

 foo = @"Julia!";
 theLength = [foo length]; // [6.10]
 NSLog(@"The length is %d.", theLength);

 [pool release];
 return 0;
}

l7Vva}0ƒ&

The length is 6.

„]ˆ¡EqSgb}0u^egnF foo  bar :Z¢”)EŒ `X-


S)/*Z`C3€†y‹ x •>`,v‡(pt`V„p,Š
Si˜\J`gyƒ oKM

,s [6.10] 7>`( foo R$kjf lengthvajf length XL†, NSString Ÿ;


.N!

- (unsigned int)length
Returns the number of Unicode characters in the receiver.

ph
ƒ]?/8S/¢1 “ [7]Zva S—m™„Sjf#<
uppercaseStringk~va/8R$p›‰,‘O$6 @J—Yš
NSString Ÿ;FSPr2Jvajfva/8R$ƒU"D+a‚
S/8R$I=['Sd9XBa/w …žz1[›S “/

[7]

65
BECOME AN XCODER Q - C 12 E 

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])


{
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 NSString *foo, *bar;


 foo = @"Julia!";
 bar = [foo uppercaseString];
 NSLog(@"%@ is converted into %@.", foo, bar);

 [pool release];
 return 0;
}

> 5D8GL

Julia! is converted into JULIA!

<9?=LJ7:%8B /
;348K/DM@,?H&
NSMutableString P"/.)1?/ NSMutableString F'OM +)R?:%
 /
;(appendString: D8 +L$!6 OI/ 2*A0/#N

[8]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])


{
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 NSMutableString *foo; // [8.7]


 foo = [@"Julia!" mutableCopy]; // [8.8]
 [foo appendString:@" I am happy"];
 NSLog(@"Here is the result: %@.", foo);

 [pool release];
 return 0;
}

> 5D8GL

66
BECOME AN XCODER ™ H k 12 s (.

Here is the result: Julia! I am happy.

%k [8.8] -F mutableCopy NSString —2Dv=O:}$Z‹i)L*U


![J9˜mutable(.oM%k [8.8] -d-Pfoo ~Q"Z9˜
J(.I ,4*(. "Julia!"

%sNW7Y Œ„% Objective-C I yˆ ~Kim‘“,SQ"Y


JQouST7Y% WJ [8.7] -<Ql‚;‡ €7Y% Objective-
C < "I " oZ{^7YQJpeS "Q"ZI JQ"0SRw7Y’Sq
„Q?<I 7Yu8–ŠT "I ",I ’Sq„Q?<JoZj‡ *
Zf|VƒJ•t%@ ŽZ˜Ž!^c+A!ZI ”>?Œ%d-
6k [8.7] -P˜Ž foo c+AZ?M(. "Julia!" JI 7YWJ†
?M

Z#T "foo" J
˜Ž4*Z( Z(.I
.I J/5

I ’Sq„Q?hB

j%an7Y…Wo8 foo JXQCz˜Ž bar

bar = foo;

oZb1JxEuSj% foo ‹ bar rQ"!ZI 

Z#T "foo" J
˜Ž4*Z(. Z(.I
I J/5

Z#T "bar" J
˜Ž4*Z(.
I J/5

&Z˜ŽcA!ZI 

%o‰gG< foo 1Ti)L?}`Z_\zI 3 [foo dosomething];


‹< bar ?}`_\3 [bar dosomething];*U!J]Eu'WoZ>
D


[9]
#import <Foundation/Foundation.h>

67
BECOME AN XCODER F % 5 12 7 

int main (int argc, const char * argv[])


{
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 NSMutableString *foo = [@"Julia!" mutableCopy];


 NSMutableString *bar = foo;

 NSLog(@"foo points to the string: %@.", foo);


 NSLog(@"bar points to the string: %@.", bar);
 NSLog(@"------------------------------");

 [foo appendString:@" I am happy"];

 NSLog(@"foo points to the string: %@.", foo);


 NSLog(@"bar points to the string: %@.", bar);

 [pool release];
 return 0;
}

2
)6-9; 

foo points to the string: Julia!


bar points to the string: Julia!
------------------------------
foo points to the string: Julia! I am happy
bar points to the string: Julia! I am happy

03.' 1<#-&A&D9B!C+-$/'0
@,
('7=8>?6-0E !C5 8 7,84"-
'*:&1<#,' MAFoo &

68
BECOME AN XCODER #×e ˜ 13 ž Š+

˜ 13 ž
Š+
8ƒ|¬Àv‘[P+g²‚ÏWX¿†¬Àv½Ô?g4?µŒ3L
{4?,<U${Öά8ЙÑ­¡8{³mg°N´Š+
arrayŠ+r{8Ggf*?+ajK¼Æg¿ r{f*qÅg?+
If* ZŠ+%Š+—‹f*ajvM›{Š+ؐh´Í50s{…
@®index)Dq^g@®gr€{f*9vMŠ+ؐh´ F8
1{„element

­Ãc>gƒ|œ¬% 1 ¦]A0Š+˜{§&g…r¶˜
{g…r
1T9Ҕ

˜{4?
˜
{4?
˜ {4?

ÈW{F8 {4?gŠ+

Hz0"ž¢p¬¥S£6ÇÈWؐ °%¶¦]wÃgÁÕ

Š+r%Y{ÒCb VNSArray  NSMutableArrayŸ·4?Ä8†}J¾
}Jge"0"žHzŽ:Â}Jg›{e"

{o(Š+gdr=· y›Äg»6

[NSMutableArray array]

=p›=£6Ǭo(Q¨/{igŠ+Ar…¤ …›{£6Ç2·``g
r©gÆ0›{WHzU$ ›{ NSMutableArray ÒCg-ºXBtˆg“
7jArHzαv¨‰ˆ¥¸×;lÒCOÌE

ªHz~~ÊZ {«c>R¸0 Objective-C Hz¨‰ˆ¥ÒC


;.rÒCrf* zršHzºt meta-classes g¸×µHz¬0›ÉË
ÓžK– g’‡›{Ù_0 Cocoa *Hz0ÒC\gdr
"+" ¯Xk';lHz!¬0d-ºnyuZg "-" ¯W3˜ 8 ž [4.5]ÏWX
¿0*HzuZ¹›{ array dg•x

array
+ (id)array

69
BECOME AN XCODER H # 5 13 7 1

Creates and returns an empty array. This method is used by mu-


table subclasses of NSArray.

See Also: + arrayWithObject:, + arrayWithObjects:


I->F A@9E,$9;'.%$18(=,G.
4:6.1$
/.B

[1]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])


{
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 NSMutableArray *myArray = [NSMutableArray array];

 [myArray addObject:@"first string"];


 [myArray addObject:@"second string"];
 [myArray addObject:@"third string"];

 int count = [myArray count];

 NSLog(@"There are %d elements in my array", count);

 [pool release];
 return 0;
}

2 (6.9;

There are 3 elements in my array

,$9?&.DC) $)1G0 <* 0 $+!


36. objectAtIndex: 6. " [2.13]

[2]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])


{

70
BECOME AN XCODER >
 1 13 4 *

 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 NSMutableArray *myArray = [NSMutableArray array];

 [myArray addObject:@"first string"];


 [myArray addObject:@"second string"];
 [myArray addObject:@"third string"];

 NSString *element = [myArray objectAtIndex:0]; // [2.13]

 NSLog(@"The element at index 0 in the array is: %@", element);

 [pool release];
 return 0;
}

-!3%56 

The element at index 0 in the array is: first string

/8.6<#2%*;* %'+0#+3%&/ :
$3%"7(  *' 5=),9

[3]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])


{
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 NSMutableArray *myArray = [NSMutableArray array];

 [myArray addObject:@"first string"];


 [myArray addObject:@"second string"];
 [myArray addObject:@"third string"];

 int i;
 int count;

71
BECOME AN XCODER &Õb Ž 13 • …-

 for (i = 0, count = [myArray count]; i < count; i = i + 1)


 {
  NSString *element = [myArray objectAtIndex:i];
  NSLog(@"The element at index %d in the array is: %@", i, element);
 }

 [pool release];
 return 0;
}

ˆ=m“z7©.

The element at index 0 in the array is: first string


The element at index 1 in the array is: second string
The element at index 2 in the array is: third string

Ä`§…-M!wY]n95>#yn9,@‹¨uec+

NSArray ¼ NSMutableArray ÑCšP’3Tea;Hy ´Ì‹q±“NÑ


Ce½_+QƏJ3Ð]…-efÏHy‰ƒÅz֋'zc+Q¬›
replace z?]pz?¬c+eaM:r%•¶
"Γza
‘X0r replaceObjectAtIndex:withObject:U)lrHy!³–3¥9z
ÀeaAo“z/;“ or@Hyu2“¯s#e{1#ŒVRzÀ
‹(#0º[FeRzk®;ÇQ2 Objective-C a9,§
À¡eÀ
o‹u4@O'“zae†a
[4]
[myArray replaceObjectAtIndex:1 withObject:@"Hello"];

ˆ=“zam?] 1 ec+©o5> @"Hello"ªœ“za!Ͱȟ


z9}validexQ˜„ ™o½$£9zc+«Ë62Hy¤ž“z
ae?¬4:Q“za‚'Hy¤¾ž#ec+2…- =¬›e‡
B4‹[K2 Objective-C ea0º™µz9Ÿgk®¢Éet
" Áª‹u˜„za~‹¿uI€&ex¦“Ng;G8zS9
§­e "" "“z'Qh*a0º¼·=ae†ao\Ó< Smalltalk# o
Objective-C – eÊÎ1r#֝7ÃiŠS9h² expressiveª‹—”‹<
ea~‹ Í°E e "ª#y‘W~©G8z9h² e" " r)Â
Qr#yX0“9D]Ö Objective-C 7ÃS9ÔZ“¸]‰‹e7jn2
|^»Òed¹;LoiŠvue

72
BECOME AN XCODER $à`  14 › ÑàÌ

 14 ›
ÑàÌ
2•3›²Iš0pL;µßÍSbnQv!>¹ÁNQv!m'T“ŒÑàb
‰b£8Om‰ Mac …b£8> RAM myq¨b¸®0=5^‰b£8.
Ètn™,bÑà‰×¶J"ÜÙ¦M‘±‰b%Ô Hʼnt;ÝÇOÄd‚
ÎXÓor“{4$m2‹‰lɖu£8GR‰b£8m…2†@b£8ß[
freeÑàœ’¢­‡‰b£8º
¥¾>‰b»´ ­À9â˜

±‰b£8i)ya*{—ya*2ÑàC'Qe©>‰#ª2.R'
—ya*jß[—«e©"b¬km±‰ba*.R'j‰×¶|¯
destroy"¢>tEÛya*É{©Új­.”R'~Og]PØS
TÆ2£8b†@Ÿ©‰ba*~­”•3Uba*Zƒ°0= tÙ;Ua
*~­R'V""~”|¯·§R'y³”|¯ba*~­Ðs‰b£
8ˆÌYŽ&¡_½Ÿb@p

pWF‰2a*³.Ètb{z|¯"xCocoa JyuËÏ
Kya*
"fa*ZÕb "h}Ë"retain count2‰b£8±‰Ö6y¿na*b
ƒ°{‰#ªJ—ya*bh}ËTá"c¹—*Pr¿b±‰€y¿n
a*bƒ°{‰#ªJ—ya*bh}Ë Tc­"±ya*bh}ˤ\¼
{—ya*c¹"³.”+B1Zƒ°O7-b”|¯Š§—ya*
­|¯"?Oß[rÞbÑà

ØSTƁ–‰b£8myËAڄÒ>‰;D'Tf(Â:ÄÊ[/fba*
–2;nyÂ:a*” yÊ[/fa*ƒ°V5^"L;.”Ub1ƒ°V‰
bÂ:a*­;y¤\ bh}Ë

Ê[/f wÂ:
1 h}Ë =
3

Ê[/f
2

Ê[/f
3

ya*c¹"”ƒ°ž<>—štÜ\"bh}Ë

73
BECOME AN XCODER !±R y 14  o¦±›x

c hS'TYm£vŸc‘qh retain p—Š€hS'5c…hS'


TYm£v Ÿc‘qh release pjŠ€hS'Cocoa „E hš_ "autore-
lease pool"1s°O/T¨I²v‘qhLªT release pjŠhS' - ^&
50^ˆ\cD"vŸc;€hS'‹HN©T autorelease pool €^¬#
‘qh autorelease pjŠvTS'F˜,autorelease pool ”e‘q€hLªT release
pjŠvTS'AC9g)ZT‰+aHœ autorelease pool .®Tfƒ^9g_
c!¥T~K autorelease pool ¨I0Š?zT]

€h_ Cocoa ND" ^9g) N{To¦±›x:|n}š_ reference count-


ingt•d£v”)=ŒŽTlMt@y 15 <H Cocoa o¦±›x?z
T8§žQC Apple ‰i‚X“% Apple !)_ Cocoa 3h’To¦±›x¤
+š_ automatic garbage collection1sJ7-€h¤+$ZT=u P"0
P«†0)¢¡ lkApple B>.™2kMU^6”8,B„E€’b:r
(2Y­

¯‹Apple –) 2006 *T WWDC World Wide Developer Conference`‡U


”
[4”) 2007 *V‡4 Xcode 3.0 kG‡Ww" automatic garbage collection :
|T Objective-C 2.0

74
BECOME AN XCODER *Ąk ¦ 15 ¯ ›=Җ

¦ 15 ¯
›=Җ
«)l.ç{5 Xcode óפ¢ Objective-C lö7i¢ÌĂÕ)]<
X?ÖЋRÕ«Yë[Wâ¢ÌÊ°6„ï¨7Cåã¢*¸x²®l¥“ò
,ªĄ«)Ì¿¢Vžlmú\N­lFhœùñÀ¢Ô`«Š¯Ë¢
ÌÊ°6„H,_ lÒÉ> ˆf¶l«Ys{¢òτjÆl

5¢Äbåã¢l¼9êr;Š‡„lvþ„¿¢„™ Äbìc„0~ƒ
}4 Apple $”Ì¢M:«ŠEen¶Z%á„ôôl‹Rµ3¢á
SlýG2æl|Š $”ÌM:¢láSXPŒbê¶Z"\fì0~
Ñ/XÇ´ÚÓ\ˁ¢?lŽÅ¢l¦’òÏ{ Apple lÄ»nڒAg
http://www.apple.com/developer

O‰ ‘lvþ¢P 1ڒ#
ă

http://osx.hyperjeff.net/reference/CocoaArticles.php
http://www.cocoadev.com
http://www.cocoabuilder.com
http://www.stepwise.com

†lڒL;ì`_ ڒÞҖ\Él¬¾¢òÏ5
http://lists.apple.com/mailman/listinfo/cocoa-dev …î cocoa-dev lÂ/1p
mailing list5«Í¢$ŸÁ¢lœùèlȍȱl” \aI¢‚Ù
lìqz÷àX0ƒƒ{J$5u8http://www.cocoabuilder.comQ`¢œ
ù l Î ½   Y ü g 5  / 1 p  Ÿ Á œ ù l v þ  ì U A g
http://www.catb.org/~esr/faqs/smart-questions.html l "How To Ask Questions The
Smart Way"k "¶œl·ä" Ag h t t p : / / m i s . n d h u . e d u . t w / d o c u /
question.htm

'ˆ ;Yüg Cocoa Ä»l6Stephen Kochan Àl Programming in Objective-C {˜


Ùoïnl;YÈš©¢Ì^°¢-)f¡`lömúO‰w³ā-B5
Big Nerd Ranch l Aaron Hillegass fÀl Cocoa Programming for Mac OS X 5Wû¤£
Xcode Ü+O‰w³ā- James Duncan Davidson Þ Apple 3À O'Reilly »@l Cocoa
with Objective-C

±y„Kߢl{¢{5 Mac åã¼95¢ÿ"¢l¼9rìéq&D{T


;•øl>&ƒ—\w¹XdØg Apple ð€ˆÛ„&Ag
http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuid
elines/index.html>(¢M:&„§gP¢l¼9Ä"\_ lvþ
ÈaI¢¶Xõ!¢l¼9XzĀݺ5tí 

75
BECOME AN XCODER )  15  $

!('
Xcode # "& % 0 

Bert, Alex, Philippe.

76

Anda mungkin juga menyukai