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ÂÖ
<HZ0.
<£ ÉanXÏÉZ0<nÇq2
Xý+Ó
Pzÿ£R±Ì°
āE^@ª@ÔØXÇ¿aª @āX±
Ìn6]āXý+nÓ<A]£ )%?§n梣ðan¯5V$ð
aXp@îā©Øn?íÓYËà"=ā.£µ)%Kð«>ìnc
y
.(MÄné\`(Ma:Fn¾=èçu£çnÑP9ÑĀ
é\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ëÐ\<
¾=¬~û´nJ}»£ÍU,µã
XåVÜâõTÚÒ.
¦ng?£ºkóD
ïÁā^.µðÉßxö¼foÅUð«<H¬¾
=\+.~ÙO=ng%£S?4Hüøùn¹a Xcode8A¡ª
±ÅdPzÿ£āR±Ì
@ª @nÜâÒÒXé\V$ݾ=
èXQ]¥W¤~<H×Jn
4
BECOME AN XCODER 8Į$~ · 0 Ã FaÝt
·0Ã
FaÝt
aWÙĆĄN¡g\ĥÕ²UEÉĊĬaË4lį Mac ĭ°bHc Macintosh
i:Â2Ă ĜĜ*.Ê0)qZÍ+Ä!âïè73)mĮñR%
|
http://www.macscripter.net/books
ďç´«
ćÎ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²®ä{áp58FR½ăäĖZp Mac s
àÁ DC ÑäF5û³Bç`LùÇIz²/
Mac
ðß²0)±³Rôþ.5BJ²Ê0)qZ²ēĐ½ Mac ðßͳ
BDNn+ïè73i:Ê0)p Mac ª°GHM»G©ò@(Ĥ DC
"økIćď¢£}ĚÔÔēĐ ²ÆĪ DC ÑĊÀº
http://distributedcomputing.info/projects.html
3. ĉu Macintosh 73MÖÄϼĮ2QÅÀĀĘ
¼ĮČL¸ó
MĞÿÍjáfÕ²wi:¼ĮÝÒ[i²é:
¼ĮP'ÆĪ5
Ċ]Ø5ÝÒDîp§ġ Ċč0¦Íj²đUÓúĉÌlEɧ
ġ
5
BECOME AN XCODER I
& 6 0 : /?$ )
@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úêSTÜäwÂ?µüÛgÁw»Ñ1SJ+b
«{§ëªw¤(çôeċ«±Þ Objective-C Â?í
ô«'É£bàTÃÊ
2+6=
2+6=x
y=3*4
[1]
x = 4;
ąöw>{§OĄw7B«åÅ&bðd=%æHÄQwC
¶¼«c+Ô¶é w-w
ÿÀĉç5(]ÝpïĆóC\`YAwÌÒGfAÌÒwĉç5#ċÂ?íW
qòĈWq®Õ¶:«å:Â?í¡āĀwJ;
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#+?é¼`³=¥|vog}½j_
Ë{g»j½¬v³=ÑjÍv3j.K>U>\*Ív>
j
èÎ4Æ pictureWidth É pictureWIDTHcm PictureWidth ©y3ÙÅ]P
5 ®«:^HxèÎ4_«:0¨Í_T«:©Í:)·Ý
¬938Ò] [2] dV[¯¦£qP7~I ¥|³=6xÍ@!Ü
j#b
ÔèÎ4Þv"M«:cmB:)
á²> jA+^a4èÎG²>Z£qË{Û;@ÖÇP#Q&0¨
2!GvW¼o±Õ'¹Û;j{£qvjèÎ4Æv
Objective-C jp:.K8 Objective-C >»¾j:â+ 5®«:^
HxèÎ4]9 pictureWidthÞv<0jx {ptèÎ4j#çbså
8èÎ4\*Í:)9fÛ;¦Zq³=jã#°
vZèÎ4j]
(ÐjèÎ4door8kdo8orc do_or
¤jèÎ4door 8"M l,8door·ÝvÎ:
såjèÎ4Door8·ÝvÍ:)
8PkÁ{9FµèÎP#*&¶C|ȬêPzz*^|ÈÃ
Új³=ÑLv*^H¦/Yj³=Ñ [3]
[3]
pictureWidth=8;
pictureHeight=6;
pictureSurfaceArea=pictureWidth*pictureHeight;
»%jÓæ×Äl,X8» EeèÎ4Æäà:´´%{ê³=
ÑS¸P#\*l,
8
BECOME AN XCODER "Í^ 1 v1j8_i
[4]
pictureWidth = 8;
pictureHeight = 6;
pictureSurfaceArea = pictureWidth * pictureHeight;
,nnºP [5]SjÁRvr
[5]
pictureWidth = 8;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;
[6]
int pictureWidth;
float pictureHeight, pictureSurfaceArea;
pictureWidth = 8;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;
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%]
9
BECOME AN XCODER 'ÄV 1 m3`9W_
AH`#l!r«¹ClLm¤=bm3foE(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+²2RP
R¨
{!6\BmòFDk_N# [8]
[8]
int x = 10;
float y= 3.5, z = 42;
!½{¡cG» W
/ZiWµICl8mjT¥®Cl!H),W¢'3WM`¥®
operatorsJ8v&W²¸f®
+ )J8 T
- )J8T
/ )J8tT
* )J8jT
[9]
x++;
[10]
++x;
[11]
x = 10;
10
BECOME AN XCODER ¤F o 1 u Yx(vOr.GM
y = 2 * (x++);
[12]
x = 10;
y = 2 * (++x);
[13]
x = 10;
x++;
y = 2 * x;
'CjhenQHqjOt{/O4XwS2}j N
=
7@G"L3c=* / + - S)%+ 2 * 3 + 4 yB 10|;
N
jg?"T0"¢GD2 * (3 + 4) yB 14
dDSjG:_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;
[16]
int x = 13, y = 5, remainder;
remainder = x % y;
11
BECOME AN XCODER 4 ) 1 + "-, *
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
12
BECOME AN XCODER *Ēv µ 2 ½ V=ËÖ Äu®j
µ2½
V=ËÖ Äu®j
ĈÊ`+=ÐÕwđî4äP"ēPwÈ<óTe"Đm[Tr´Ö [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ÒÊow¦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ËÖã¿"OwS¶5B
wêUËÖöx®8×ËÖwý
d±õ
// »ËÖ
8 Xcode ËÖåCw;tËÖ}[ÛÌ9DöQ&ph /* ç */ Î
/* »ËÖ
AÛÌdD */
ăÅ Xcode ã£ĉH=KGPĂĆÇwès;FÈ<£ĉ#?Aà
w£ĉuäËÖuoutcommentĈÊQ¼0wÈ<óph /* */ Î"ï
w¤+ËÖ¯»¼0wÈ<ócfùw¼0_ÒÆÝH»<"ē
+cą²¡ĉābcè;t¸ËÖ¢cw¼0kÉđî"!
DïwÈ<ócQø5wkÉ>đîÃÙfV=ËÖ¢cw¼0M*©ÝH
ËÖwmÄ"Y¾w}Ew%!Öďcès&hlHë\=þ
Kw»6ê°Ã»È<ó8¥ëA".L*ßhw¡ĉ
8»¼0wÈ<ó
ÿ×J+ËÖc|Þ]NČnyÄu,È<ó°Ã
cw\Ïābcè;t*8ºîúgî[`+h8÷(Ø·Á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@
b2xRbqªt±@Ð(AG)b#PÍ
Gq±@LÚA~
ÅYM9 Objective-C qh\¯R-¶sVq±@|=K£Üq
=n±@#P§I
tq)+ºuß«TZ0ÝC*~
7q±@Ð%º;q±@
Ò! <B=nÁAݬ-¶;<
:0ÏÎqݦ|Èå9ul¬ºQi_:9
C ¹!o^£Ü±@Ðä+Ul0Ý
¦ÞqÂXÆ|S)Ö+q"¿£^]=%A£)%1^
Ë·×.Ù}Ǧ[)q²n|%vØq6Ì}¦[±@Ð^
Ý||;`¦£Êa@functionq)AEq8>%\1¦8
>^c'¦£a@Zä¦[±@Ð¥G\1a@¦»gu/9CW±@¨F
Aa@;`main() a@ÑàÕº$T« main() ¦a@¦Î+rÆ;
G®µÁ´eG±@Ð
[1]
main()
{
// main() a@ãÓq±@нkC¤
}
[2]
main()
{
// áÍ;CyO
float pictureWidth, pictureHeight, pictureSurfaceArea;
// Rse¦[áͳ¦[áÍ
14
BECOME AN XCODER m7 M 3 P -
pictureWidth = 8.0;
pictureHeight = 4.5;
// 2<E9?_3V 9
pictureSurfaceArea = pictureWidth * pictureHeight;
}
[3]
main()
{
float pictureWidth, pictureHeight, pictureSurfaceArea;
pictureWidth = 8.0;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;
}
circleArea() // [3.9]
{
[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]
}
Xyk~2I[z)DB5*CG [3]
[5]
circleArea(float theRadius) // [5.1]
{
float theArea;
//
Mu pi hm r "
theArea = 3.1416 * theRadius * theRadius; //[5.5]
return theArea;
}
[6]
float circleArea(float theRadius)
{
float theArea;
theArea = 3.1416 * theRadius * theRadius;
return theArea;
}
16
BECOME AN XCODER K g 3 l C+
=OH-LC+k
Y4)J<- T|
oVvL8@]VM
L
[7]
int throwDice()
{
int noOfEyes;
// B,I 1 D 6 twLq+
return noOfEyes;
}
[8]
void beepXTimes(int x);
{
// p x .Lq+
return;
}
[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]
}
[11]
float circleArea(float theRadius); // O/`<
int main()
{
¢Z/\N~'H#*¢u£ L [10]
BmbAjM\¡¬}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
«@JoLÛ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);
}
Ô©T
<¡¤·Efµob@ypÞK{+Ài¸3[{tAÐNoY¨
{&!Vb@vÈÙc(+o«@Ì)WAVÛ¡b@oxP2O+
oFo¹
Ò^_Ã&!VÛb@oÛÊ9ÁK{+v©.¼LD¡Q5ÈÙ«
@oa"¢4a"
&!ÉÇ¡b@D&!<Q5¸+¢¼Lom]
/+hÄq½o)A>J]/¡b@
¨{¸
¡b@o9?
¡b@oÊÊ°R!wM
¡b@²;ÅSÏo!lowM
rectangleArea
19
BECOME AN XCODER #¦V y 4 +,/
y4
+,/
?h/?hW4 5E1W
k;a?hGC5vnd`A?hWeS¥
'K5||00WUAS¥'/ /~"m?hsH$i Cocoa
OIWL4NSLog() L4~aiR£.bx/us
$*bdAuWS
"+," M 7NY):4
[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¤WoJ2&\W4-
£JK/?WDz 4 [1] W>¡2
i39=N0i3character
[2]
NSLog(@"");
NSLog(@" ");
f [2.1] =i3
{bX39empty string(<WZ]bf
[2.2] G[X39cpK^=iX%space.6~i39WZ]
a 1
20
BECOME AN XCODER '²[ } 4 -.0§
04;Go>\4B-J6om\«HIgvM³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.
h# [4.1] t9_\Xb
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);
¥Y0aCk6l4;ll° /l4;A G6
¦\W:%d
z¤¡74 % 6o>\$_il d deci-
mal number \ªt9_0¨ %d U0\<u_\W:+
?° integerToDisplay \jt9£H [5] wL
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);
[7]
float x, floatToDisplay;
x = 12345.09876;
floatToDisplay = x/3.1416;
NSLog(@"The value of the float is %.2f.", floatToDisplay);
mMu`Dx'/TR}
M`
fsrQLXVG\rzXo~
tKkG'A`Q|HCg5V`s1b%9CVwZ)p<=C
K`% % ~ f
q>F % ~ d
q8N=gXKl+'A`N=
CKVCK[_saVCK
[8]
int x = 123456;
NSLog(@"%2d", x);
NSLog(@"%4d", x);
NSLog(@"%6d", x);
NSLog(@"%8d", x);
7 [8] )p'C
123456
123456
123456
123456
#[N=QCK~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
[10]
int x = 8;
float pi = 3.1416;
NSLog(@"The integer value is %d, whereas the float value is %f.", x, pi);
tyG.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.
#import <Foundation/Foundation.h>
[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
{
float theArea;
theArea = 3.1416 * theRadius * theRadius;
return theArea;
}
{
return width * height;
}
24
BECOME AN XCODER ¸J s 5 v ¤¶i.)
s5v
¤¶i.)
8[DQUH CK)£
TM/´Wl¬K'¯|´->@
¡%¬1TnK Mac ->y<®nK Mac Tµt_\dcK
)U¤¶§compilerT$9nK)£±z* Mac Hfi.Ki.£aH
KT Apple K2 Xcode )uYKn«Bª Mac OS X HN
K!(% Xcode1T{¦&0¥¢Fn+wKJnm
http://developer.apple.com K
}L# DX2*U^
25
BECOME AN XCODER ¾P v 5 } ©¼¢k1-
zMlhQ' ¢2
;bs(_V&Qlh#x¡¬Terminalk1*Op8rpQ-#x
¡¬k1D_¶4E~C¥ª§MplhQ' /c^+0·
/cGX#x¡¬Nk1Q-'+vc+!ª
_¦\Q/9
[aQ-' Tª"¦+!¯
s(cBZ-z`eQpmnn]KQ5s(puS{c«/Ici
Y»QiYX "Groups & Files""H,Lw.p-QN/´h$S{»@/)
´h3XWpV&)£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
26
BECOME AN XCODER
7 + 5 - 451(.
[1]
#import <Foundation/Foundation.h>
main()
%.7 !0
27
BECOME AN XCODER ,Ē{ 5 ´ ôĎä£G¾B
ÄÖ.i¸1[\[|¾Bòv=b
return 0; (
ĂCe¨æ¥|xH
Þ[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
28
BECOME AN XCODER ¬Q w 5 z «n4.
[2]
#import <Foundation/Foundation.h>
^V!xd.¡X
H%S Build d]3Sm+_ [2.9] Uv
Xcode Yd«¤
,Or§
R%v4xdS¨N
PparseZ«¢b#^7SBs@
>4.A¥[Z9>
4\J8'd&y"Sr~D i(1M import _
[2.1]r~Dd-#\£_S: [2.8]r~D«
¢Iw [2.9] 4gvBs2Al©AZ+x42Z
+SUax4+xªpIS`^ukZ¦«¢^~D/S)|
6ZxC)|?phSl©/WS}_L)|S5?pZ.h¤
S*¦jWtT
¡Fexdl©A$0n4.Ko7
[3]
#import <Foundation/Foundation.h>
29
BECOME AN XCODER B
- 5 / =A:*1
51*$'+& >
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
o1]JG`:-3=F&6;,}j3?"PHJ`g<(
ut/J^.
p3=37>&
31
BECOME AN XCODER
> \ 5 _ xpS%e!
<Xnq(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 MU,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]
[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]
== e<
> <
33
BECOME AN XCODER #ÅT 6 (h
< Q
>= QOQ
<= QOQ
!= Q
§¨
.gi³:h5t[4%¢`
V¿;k)Amg)|
F"Hy¢%JV if hNµ
ÆAmVee9§(En§¨
¢.InyN$nS
` truex` false~
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.");
}
gUVB(h½}H`9V¯g¼VBn(hPJn(h
V_£=k)jV(¢)ÄÀ1S3'¤jV
nh¢
ÄÀ\]Á
[5]
if (age >= 18)
{
34
BECOME AN XCODER 6
35
BECOME AN XCODER %²W y 7 ~ H& while Ke¨d!
y7~
H& while Ke¨d!
M'[bBhumXQ64¥F!d!} r:7Bh17NL
4Ke¨r:L4X4¥ [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!£79Q6
X4G¤Objective-C IiVKM"
[2]
int x;
for (x = 1; x <= 10; x++)
{
NSLog(@"Julia is a pretty actress.");
}
NSLog(@"The value of x is %d", x);
[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
Objective-C +P*8TD7
while () { }
do {} while ()
[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);
[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);
38
BECOME AN XCODER #ÔY 8 q4¯?n (GUI) [2
8
q4¯?G%^nGUI[2
Ë ± Objective-C \Ð[¼@p«=/©Ize»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
lxÄvÉÉ e»ÊM~0 Objective-C FW:w®.
À1ÁÏgc¦gZ*[|ÓG% Objective-C7O¬
l[Z*[´Òd¾½2I p
39
BECOME AN XCODER F f 8 m W-
7U (GUI) Hq,
W close ^Yh{_ujWvr
WG$=*jWvr6?HG$=*j<Oy
a. JwxH
c|a]~|SoWpN;&iT)8WvrBI
40
BECOME AN XCODER (ñn ¥ 8 @ÍQ (GUI) p³=
éK[$}y+·´o,åò©o,<daccess%"FpX0J©
\Ja±} closeè¬Á¡|
·´p "è¬" |»©|»À½
close ©µB·´o,o,"FpJÓmmethods±Ì¡À
cp%eb=tzÌh:l¡ÉȶRc©ÆÞ¶])%À
¡_9Oæ
8©éK¡y+·´o,{%ÀußñRAM_ä<©·´pGÃ
\apDzD%À謩·´p³=ÚJ-'ZÏËÅpßñÀ
}Ò¹5©-³=ÚÏW·´«}Ùp)_謷´p³=Ú$פ
AI}W·´o,«<dìk©·´éKp³=Ú
:1vcp¡8'cp³=Ú²À N\ußñÕëj%6X¦p
D±Ìvs*ÊpqcU{pÂRÀ¢©º¼êçiÑ
R_¯ª³=%@`|»button;íGtext field:l¡
|
|»Àã c©;íG:l¡|
#|»;íGw
Àj #S%¾>à@`|»xÔpÔáÁ²&¡ÞpU
9¡"T:Hy+(pÔáÊR°îVV_
Ry+p³=pÍ
:lR³=pa|»¨|
%Àa NhFpmp3
Ó%À¨½µLµÜf8·´pZ^
close À½µ©·´o
,%}·´éKpÎñ5BR¤8×p}o,D% ©`|»£
?[M¸;íGo,!ð*Ø
5BR.y+REpéK²{y+%pÎñ©o,À}©\|»
p£?rÛC
pͱ̷´o,ÙRpÎñ}o,I}Õ·
41
BECOME AN XCODER "¿
Y
8 n7¤Ck (GUI) [5
Dm[¥¿6N&MncS{L[zpa°[X~;nX
[5¯e=U»@
:]¥¿!G ~;nX{nzp3½=
Z*|3½=Z*[.3zp©\'5message sending expression
0Dm5 [Z*Q9zp)[x¤
[1]
[receiver message];
[receiver message:argument];
42
BECOME AN XCODER w: Q 8 V F'd-E (GUI) <Z&
#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
uJÔ{f-gÓYproperties¿ÆW$np
command-shift-
i×GzTtt$Ê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 lookh+!ºdg;w¢6g#Øl)¼
¹.><¢6¾
±k¶gGz2uTm,{ÐB?q2ªXk×GzK ËttÐB
qo¸°@g
rs
¨g¢6v@4`!Q)B®m,3g_=:);ǪX¼
¹[8g_=Tm,;g¢6NÊST¶4`um,{8Y
g¦£"·u Ï^PYg¢6¾C!:·ur[8Ug<r
behavior4ZϦ£T¼¹¢6¾Ì¥m,2Bg¢6v}®D7g
_=A§gÑ\inherit$[8g<r:q× Objective-C µ C 8[/
g1
44
BECOME AN XCODER ,Āo ¦ 8 ¯ C×O (GUI) q¿A
ª?IaqÉÎCÃÀûKNSWindow<ZF' æäüj
G*qûK©£<$ ]HaqÃÀûKFÍqÜÃÀBa
"close" ªË½-â\e[TC*æä2I¿AéFTC~WZ]¿A
éaqûKø²?lªÜÃÀqûKTC%Ngmq¿Aéª
ËGÈߪÜÃÀûKiüjqûK*q "ûK"superclassF?
á
qѪJË}þÄH
&raRaªmhsaÓªüjĀU
hierarchy of inheritanceq±°÷
?lªmTCRa#qµ»m¨§¢ªµÕ
SYåq®ï¸
íçL^YåEõTðmó<ªÚ n
Objective-C ˽#sig-
nalòÝerror
?l
ÎüjGûKqmØJimplementGqH
{âðxø
²' ùäoverridegqmô_`Þ' æä¿Aéā|
ú|Å
Ë<ØàúÃÀv4Q*¥a'Ãê´)qÜÃÀûK.`úÃÀqmË
d Apple gÏqZ^.8q9Û:DÍqÜÃÀ¡Baú¨
HqmËqFt Apple qZi £<ªÃÀË4¥#Ãë)¼zq¨
ú
<P.=¢ì!ÊaÖÌvāP` ?Iw0ûK
45
BECOME AN XCODER !§O m 8 s _4>\ (GUI) Qy2
. CocoaDev Q wiki
=( ;QFSQiuh.h6Q
Sb)Y http://www.cocoadev.com/index.pl?ChooseYourOwnPrefix
U&_¥<bh{Q+1[d¤Mp_P'Q4$eCD
?^YG. Cocoa $DR|zQ¥<oI+X NSWindow_C
W
$DR%£7Q¥<oI+X NSColor.?^QC
?^``U&Q MAFoo
¥<.pW$DNP'.y2W08r.fQpvWX?^{QW
_@4c<Qq$+1
46
BECOME AN XCODER !Ä
W } 8
i2¡=e (GUI) Y1
Å>h)¸3i1c9YF|_~_ YnjBi_o´pQ
Yv9tirmM
;Rcx6Y MAFoo ¿:VY+¥irmt>
hkk]%Y MAFoo ¿:Y¢ÄMAFoo X&MAFoo X& DEC2;6iv
9Y1®8` MAFoo ¿:2,4it MAFoo X&YrmÀtrig-
geri FAFoo ¿:YVK9a&F- J
tirm0Á7X&
Birm«;iVY+0-iJi0Á7X&YVY'u
`Ã$igig~9birmY(5¦0Á7
csVY+¥s
~t
>hY¿:¨cLiv9Vh~LiX&P4º¨ci
outlet`iª"Kq³liX&`i0Á7X&`Rctr
mY£
47
BECOME AN XCODER e0 A 8 D >S"
; (GUI) 2G
4*>1M2CI3#=:J#=2*>6LNQ27FA>6L
8::'#=2 MAFoo TebdX 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*(23FJ?YF!G0M-T0M?4@HKsXv4@(
2Fuc'gm?
V"0Mlj\#JrxB?Za
49
BECOME AN XCODER
7 Z 8 a D{&A (GUI) 9f
inspector
;_i
2 MainMenu.nib lg
MAFoo >/K,9e<d. Classes
BTwr?
.D#9Vb-
MAFoo #>\/K,9U, Classes b
/
Create Files for MAFooe< Interface Builder rPT@(X,9H5v.~
9"
[y]r(^+H5.'Cf9RHxF$
^>'C@9
50
BECOME AN XCODER E 1 8 4 )?' (GUI) !7
$ MAFoo D/7B
51
BECOME AN XCODER A b 8 e S%x1Q (GUI) Ch$
[3]
/* MAFoo */
a"2RLb
SXMAFoo.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:ZQ7Z4LIID*S2emU8eL
u*GE
Pz&7ZLu*[OyiO]}{_[^\weL
MAFoo K@U:b.C[I7Z
URj=`3 1u*"lU
3L<q+& Interface Builder 3Oy MAFoo KzLkvt-7ZLU
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
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`0DaNQ¬6W9`
a Apple I|AQNsetIntValue: W)+©3P"«!_QN6Wn[
*5;EsaQNG
55
BECOME AN XCODER |
< W 9 \ `-u*;
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:e2Lmt
– setIntValue:
56
BECOME AN XCODER ÖY 9 CÐ>W
Ó~Kh)SBwKnq
[tÀËÈ setIntValue:
setIntValue:
- (void)setIntValue:(int)anInt
- Objective-C sª»"x±ÖWf@[¢P´p²[lÐ>WBw
i§¿Mvoid ^"§¤+$;U9 W[~]¦jl¨Bw¤x setInt-
Value: }z textFieldBw[ MAFood Z#§!0Ñ:Z#H3M$;[v¤+
KF·Îa-bªiu(int) ^"Õ¹ anInt £lxŹ-Bw[J
Bw¤ [l¹v 5 R 07wlŹFÇ*6Bw§®M$;Í
4{yrCMÁ¨[WK l4ËAÏ[<l¨D¼%#iX§¬.
[SÀ`k½
[1]
- (int) 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 y96J
"N6P-X"NJ%uHR,>U_T}Ng&V
,t\b^#06/C.NJ%pY
58
BECOME AN XCODER "¸V 10 awakeFromNib
10
awakeFromNib
Apple byu-:¹y,]&7
X2mrxlQC,yX2y
!b,© _-IBz6¨j:X
$
HjoaframeworkG3>i,X¥F [12] X Foundation Kit oa
E
=D#Ycg´XSvjoab Application Kit\~y
,© eJXW'D#Yw<Hjoa4@.X¡R'
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
"\!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$*ou
60
BECOME AN XCODER ÐZ
11 h»
11
h»
9v:[ÒQFÍP¸[ C ²DÒQ|ÄL_¿^
*X(<#Y¥
!ÁÈ
±}2D - Ê¥h»pointer*
5¨6f/Å8 - VN! Objective-C J3-qF
i[
ÇIJ³¾kÏ [r
[1]
int x = 4;
vh»pointeriv:/Kι4;[ι
« sºe9vh»
[2]
int *y;
61
BECOME AN XCODER `
0 G 11 J 4\
[3]
y = &x;
N=4\EI=4\2Y6Q(*D,41_Z'TI=U
*y
*y = 5
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;
}
L3ESI[+
[5]
int x = 4;
increment(&x);
// F x M- 5
62
BECOME AN XCODER %»Y 12 3<
12
3<
P(_gDmhP s`@integer®¥long]®¥floatu
³¥doublek bu³¥BOOL#X+Dm[ pointere
¦Dm_~·P3<stringnµt 70²P NSLog() O5[toP
KnO5Dm,-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<?gns`@N}y/g7nd1['"mfZ*f'
NSString ¶@T NSMutableString ¶@Uc)[0¼DmN}yK¶@' NSString
R
[2]
NSString *favoriteComputer;
favoriteComputer = @"Mac!";
NSLog(favoriteComputer);
|w
nj!fdrV[>f! [2.1] £iK¹ x{
DmaAne¦º¥tDm$¢Wne¦e.[fps`@Sf 11
[2] [j!
[3]
int *y;
63
BECOME AN XCODER %ªW y 12 4;
[4]
NSString *favoriteActress = @"Julia";
L
[5]
#import <Foundation/Foundation.h>
NSString *x;
x = @"iBook"; // [5.7]
x = @"MacBook Pro Intel"; // D!`«}$mdpOnYl¢
NSLog(x);
[pool release];
return 0;
}
s:^}h 6-
h NSString §@Y4;|bE¨Yimmutable0b"n|iE
tniE4;72{P?FzOniEY4;kT{wR
tY
6YCKtM' Objective-C OtY
6ltx~
YuVtJeiEtY4;
64
BECOME AN XCODER £Q s 12 x /8
{3gbpX]cAS/8*43;5pNU"S/
8R$TXcASva]JS;X NSMutableString ;>`,x|Vm
iJ_%¤>`LpSJ/8XaR$W{`XR$>`y
kjf~`GH>`k length jf~a/8R$ [6]
[6]
#import <Foundation/Foundation.h>
foo = @"Julia!";
theLength = [foo length]; // [6.10]
NSLog(@"The length is %d.", theLength);
[pool release];
return 0;
}
l7Vva}0&
The length is 6.
- (unsigned int)length
Returns the number of Unicode characters in the receiver.
ph
]?/8S/¢1 [7]Zva SmSjf#<
uppercaseStringk~va/8R$p,O$6@JY
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>
[pool release];
return 0;
}
> 5D8GL
<9?=LJ7:%8B /
;348K/DM@,?H&
NSMutableString P"/.)1?/ NSMutableString F'OM
+)R?:%
/
;(appendString: D8
+L$!6OI/ 2*A0/#N
[8]
#import <Foundation/Foundation.h>
[pool release];
return 0;
}
> 5D8GL
66
BECOME AN XCODER
H k 12 s (.
Z#T "foo" J
4*Z( Z(.I
.I J/5
I SqQ?hB
bar = foo;
Z#T "foo" J
4*Z(. Z(.I
I J/5
Z#T "bar" J
4*Z(.
I J/5
&ZcA!ZI
[9]
#import <Foundation/Foundation.h>
67
BECOME AN XCODER F % 5 12 7
[pool release];
return 0;
}
2
)6-9;
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*9vM+Ø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-ºXBtg
7jArHzαv¨¥¸×;lÒCOÌE
array
+ (id)array
69
BECOME AN XCODER H# 5 13 7 1
[1]
#import <Foundation/Foundation.h>
[pool release];
return 0;
}
2 (6.9;
[2]
#import <Foundation/Foundation.h>
70
BECOME AN XCODER >
1 13 4 *
[pool release];
return 0;
}
-!3%56
/8.6<#2%*;* %'+0#+3%&/
:
$3%"7( *' 5=),9
[3]
#import <Foundation/Foundation.h>
int i;
int count;
71
BECOME AN XCODER &Õb 13
-
[pool release];
return 0;
}
=mz7©.
Ä`§ -M!wY]n95>#yn9,@¨uec+
72
BECOME AN XCODER $à` 14 ÑàÃ
14
ÑàÃ
23²I0pL;µßÍSbnQv!>¹ÁNQv!m'TÑàb
b£8Om Mac
b£8> RAM myq¨b¸®0=5^b£8.
Ètn,bÑà׶J"ÜÙ¦M±b%Ô
HÅt;ÝÇOÄd
ÎXÓor{4$m2lÉu£8GRb£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*~Ðsb£
8ÌY&¡_½b@p
pWF2a*³.Ètb{z|¯"xCocoa JyuËÏ
Kya*
"fa*ZÕb "h}Ë"retain count2b£8±Ö6y¿na*b
°{#ªJya*bh}ËTá"c¹*Pr¿b±y¿n
a*b°{#ªJya*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
74
BECOME AN XCODER *Ąk ¦ 15 ¯ =Ò
¦ 15 ¯
=Ò
«)l.ç{5 Xcode óפ¢ Objective-C lö7i¢ÌĂÕ)]<
X?ÖÐRÕ«Yë[Wâ¢ÌÊ°6ï¨7Cåã¢*¸x²®l¥ò
,ªĄ«)Ì¿¢Vlmú\NlFhùñÀ¢Ô`«¯Ë¢
ÌÊ°6H,_ lÒÉ>f¶l«Ys{¢òÏjÆl
5¢Äbåã¢l¼9êr;lvþ¿¢
Äbìc0~
}4 Apple $Ì¢M:«Een¶Z%áôôlRµ3¢á
SlýG2æl| $ÌM:¢láSXPbê¶Z"\fì0~
Ñ/XÇ´ÚÓ\Ë¢?lÅ¢l¦òÏ{ Apple lÄ»nÚAg
http://www.apple.com/developer
O lvþ¢P1Ú#
ă
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
75
BECOME AN XCODER ) 15
$
!('
Xcode #"&% 0
76