iOS MacOS
" Objective-C
-f- Xcode Apple
H iOS Cocoa
n e ro
^nm vp'
Aaron Hillegass
Objective-
Programming
BIG NERD RANCH GUIDE
OBJECTIVE-C
iOS MacOS
^
* -
--
2012
32.973.2-018.1
004.43
X45
.
X45
fSBH 97&032l706287 .
KAH97&v45&01567*6
. . .. ......................................................................................................
I. . . . . . ............. ...................................................................... .....
1. . . ...................... ............................................................... 12
Objective-C........................................................................................................ ...
........................................................................................ 13
.......................................................................................14
2. ............................................................................. 15
Apple................................................................ 15
Xcode........................................... ....................................................16
?................ . .......................................................................................18
? ................................................. ...................................21
?.......................................................................................23
....................................................................................... ...... 25
II. ............................................................27
3. ...................................... .. ..................................... 28
.................................................. ................................................. ......................29
........... .......................................................................... 30
.................................................................................................. ...........32
4. tf/else....................................................................... .. * . ..............................33
.................................................................... ......................35
else if........................................................................................................................... 36
: () ............................. * 37
........................................................................................................... 38
5. .. ........................................................................................... ^9
?....................................................................... * 39
?............................................................... 40
.......................................
, .........................................
.................
............................................................................................... 11111
................................................................
return............................................................................................................... g2
.................................................... '
.....................................................................................................
6 . .............................................................................................
f ^ 7_ ^
printf().............................................................................................................................
...................................................................................................... ...
..........................................................................................63
.............................................................................................................
7. ............................................................................................ ................ 65
while................... ............................................................................................ .. 6 6
for............................................................................................. ...........................67
break........................................................................................................................ . . 6 8
continue........................................................................................... .. .....................69
do-while............................................................. .................................................. 71
.............. .. . ........................... ................. I ....................
............ ......................... ....
8. ............... .................
................. .... .................... .. ...................... ........................... ..
................. . . . T .................. ...............................
. . . . . . . . . . .............................................
NULL ....................................... ..........................................................................................
............................................
.................................................... .. . . . . . . . . . . . . . . . .
9. ...................................................................
NULL.........................................................
10. ..................................................................................
..............................................................................................
11. .............................................................. .............................
I I I . Objective- Foundation . . .
12. ...................................
...........................
............................ !
id
......................................................... ..
....................................
NSSet/NSMutableSet....................................................................................................... ^
...................................................................................................................................................................................................
22. ...............................................
...................................... .....................................
.......................................... ................................... ...
enum................................................................................. .............................
|
23. NSString NSData.........................
NSString ......................................................... ....................... ...
i
NSError............................................................................... ' ' ' .................. ...
;
NSString......................... ......................... ...
NSData .............................................
................ 1 7 8
NSData ..........................................................
........ *7 9
24. ...................................................... ..........
'^ ^ *
/........................................................................... ; ; . | ?
...........................................................................
^
........................................................................................................
?............................................................................................ ...
....................................................... ...
25. ................................................................................................
2. .................................................................................... 19 7
........................................................................................................... 200
W . ........................................................... 201
27. iOS.......................................................................... 202
iTahDoodle........................................................................ 203
BNRAppDelegate...................................................................................... ...............205
iTahDoodle......................................................................207
--...................... .......................................... 2 0 8
..........................................................................................2 1 0
.................................................................................... 2 1 1
iOS Simulator................................................................................. ^
214
..........................................................
.......................................................................................* j
............................................................ ..................................
g
: main()?..............................................* * * *
28. Cocoa.................. .............................. ...................*
BNRDocument.h................................................ '
1 ^ J
Interface Builder.............................................................. .............
BNRDocument.xib...................... .. ................. * * * ^ |
..................................................................... ' * * Z *3
MVC................................................................ .......... * *
BNRDocument.m............................................................. 2 3 6
........................................................................................ .................
18 3
dw ....7_.............................................................. 285
char * ................................................................................................................
7fiQ
......................................................................................
NSString ...........................................................
.....................................................................................................
35. ..........................................................................................
36. ............................................................
37. switch....................................................................................
............... 300
............. ...................... ............ .....................................
................................................................................
.
,
, .
(Mikey Ward) ,
iOS, .
,
.
, Objective-, ,
.
(Scott Ritchie), (Mark Fenoglio),
(Brian Hardy), (Christian Keur)
(Alex Silverman).
(Susan Loper)
, ,
, .
.
(James Majors), (Mark Dalrymple),CKorr
(Scott Steinman), (Bart Hoffman),
(Bolot Kerimbaev) (Nate Chandler).
(Ellie Volckhausen)
.
(Chris Loper) InteiligentEnglish.com
EPUB Kindle.
Pearson Technology Group
*
^mm
. iOS
Mac OS X, ( ,
). (iOS Programming: The
Big Nerd Ranch Guide Programming for Mac OS X),
. ? .
, . ?
iOS Mac, ,
.
, .
.
, - .
Objective-, ,
.
-
. ,
. ,
.
.
Objective-C
,
, ,
. ,
13
.
.
,
( ).
( ).
, (
iMac
, PowerBook). ,
,
.
,
.
,
( )
.
. ,
.
1970- AT&T.
Unix, Mac OS X nLinux,
.
Windows .
Objective- ,
- . Objective-C
Apple iOS Mac OS X.
Objective-C
, iOS Mac.
?
Objective-C . , ,
Objective-C ,
. ,
Objective-C.
, Mac.
,
. .
. -
14
, , - 1
.
,
.
.
.
, .
,
. ,
.
, ,
.
Big Nerd Ranch ,
. http./ /
forums.bignerdranch.com/.
,
, . ,
,
. .
.
, . ,
, .
.
,
- . , -
;
. ,
,
.
, .
,
, () . ,
.
,
(Scott Rosenberg) Dreaming in Code.
.
, , . ,
, iPhone iPad.
:
Apple;
;
, ,
.
Mac.
Apple
Mac OS X (Macintosh) iOS (iPhone
iPad) Apple.
http://developer.apple.com/
Mac App Store.
/Developer
.
Mac OS X
iOS.
Xcode /Dez>eloper/Applications. (
Xcode -; .)
16
Xcode
Xcode
Uudtaf
C h o c se a t w n p t a t i f o r y o u r n e w p ro J e c c
Application
Framework & Ubr*ry j
Other
.............. 1 Appiictfton
^MatOSX
coco
*-Apptescript
FrameworJc Ubr*ry
Application Wug-ln
System Plug->n
Other
Previous
. 2.1.
. 2.2.
18
Next.
, . ^
, .
Create.
*
. :
-
.
( ? , O bjectiv e-
. ,
O b jectiv e-C .)
?
A 6oodS tart.
Build Phas*s
ftutes
&* *
^ACoodStart
maln.c
ACoodSurtl
.Produas
!..,^,),>,: *.Qr
i Setting
*ACoodStan
^^^&^^^
^
'^^^^^^
Additional SDKs
f Ati>tttcturcs
{ Base SOK
| t Bu)ld Active Architecture Onlv
Oebug
i
Release
i Supported Platforms
( Valld Architectures
64-bitintei - S
Latest Mac OS X (Mac OS X 10.6) I
<Mu>t>pie values>
Yes J
No;
macosx
(386 *86_64
i-rtTBM
i^M
iSM
ftviui!w-arfr^M
^rt^tt^rt^^^^^^^^^^^&
btflld
Build Products Path
buitd
Intermediate Build Files Path
<Muhiple valus>
Per-conftguration Build Products Path
bulid/O*bug
Debug
bulid/Reiease
Release
Per~<onftguratk>n intermediate 8uild FI , <Muktpie value>
buiM/AGoodSurt.burid/Debug
Debug
build/ACoodSiart-bulkt/Reiease
Release
/V*r^a*ders/rtj/nii+H*KFbWCt^iMrt^
Prc<ompiled Headert Cache Path
normal
VaMate kfUn91
. 2.3. AGoodStart
19
: Mac OS X
,
,
.
.
main.c
. ( main.c,
AGoodStart, .)
1K S S S
|||
,,&:jf
*tSAA3_aA 7
7
^^2^ ^5 ^ ^1^^^^^ j
*4"* ^ ^ ^ ^ ^ ^
*<0
';
ACoodScart
1 urpet. 05 X SDK 10.6
J AGoodStart
.......
% ,> ^
//
//
//
//
//
. - . ! w
- ^ #
: . . ': ^ R 1
r.p n * r f i
m ain .c
A 6oodS tart
C re a te d by Aaron H ille g a s s on 9 /1 2 /1 1 .
C o p y rig h t ( ) 2011 Big Nerd Ranch. A ll r ig h ts reserv ed .
//
# in c lu d e < s td io .h >
i j i n t main ( i n t a r g c , c o n s t c h a r
1'
a r g v [] )
/ / i n s e r t code h e r e . . .
p r i n tf ( * 'H e l lo , W o rld !\n " );
re tu rn 0;
[+ i @ V S M
20
:
.
, I
.
. , , .
, ,
. ,
,
, :
, , .
Objective-
:
//, ,
, . insert code
here..> Apple.
,
/* */ , !
.
.
, ,
.
; ,
.
, !
, . , * |
;
(;). ( .)
,
.
, Xcode . *
, , ,
, Xcode ,
. Xcode
.
maxn.c .
. ({ }),
naln. , .
21
main.c, ,
. main ,
. ,
. , ,
.
#include <stdio.h>
in t main (in t argc, const char * argv[])
//
return 0j
>
( : , ,
. ,
. ).
, , Xcode
. .
.
, .
Xcode,
Xcode.)
. Xcode
, . (
, .) :
Xcode ,
.
(, ).
,
.
, Xcode
() .
?
main.c ,
; .
22
: Xcode , . -'|
Xcode .
.
Xcode.
.
, ^
.
P , weuian*L
. Xcode (log) .
.
. ,
p r i n t f ( " I t was the best o f t i m e s . \ n " ) ;
, :
? .
. Xaxie
23
, , , . ,
Run. ,
.
'|{,!
( ,
. ,
, . ,
.)
,
Debug AG oodStart. ,
.
.
. !
GNU gdb 6.3.50-20050815 (Apple version gdb-1705) (Tue 3ul 5 07:36:45
UTC 2011)
Copyright 2004 Free Software Foundation, In c .
DB is fre e softw are, covered by th e GNU General Public License, and
you are welcome to change i t and/or d is tr ib u t e copies o f i t under
certain con d itio n s.
Type "show copying" to see th e c o n d itio n s .
There is a b so lu tely no w arranty f o r GDB. Type show warranty" fo r
d e ta ils .
This GDB was configured as " x 8 6 _ 6 4 -a p p le -d a rw in " .tty /d e v /tty s 0 0 1
[Switching to process 2723 thread 0x0]
I t was the best o f tim es.
I t was the worst o f tim es.
( Apple
LLDB. GDB, .
GDB, , Xcode
LLDB. ; !)
?
, .
. . , .
; main.
p r l n t f . ,
. ( , p r i n t f ,
5).
24
:
. . :
1970-
.
. , .
,
.
*
Baked Chicken
III
j
j
<
I
I
I
I
. 2.5.
.
.
.
?
^ ),
(
). ,
Xcode, Run.
; .
, main.
main . ,
rnain p rin tf. ( ,
, 5.)
25
He
, :
, , . ,
, . .
.
. ,
. ,
. :
? , ?
, ,
, , , .
, ,
, .
.
. ,
,
.
, .
.
.
. , .
; ,
.
,
.
, , .
!
, , .
,
. :
,
,
Objective-C.
: -
. , ,
: 14,2 . ,
: weight () = 14,2. ,
, (15 + 15
), .
. 3.1. ,
,
. ,
, .
(, cookingTlme ( )) (, ).
,
(, 228.0).
29
. :
flo a t weight;
f l o a t weight.
.
. :
. ,
, .
, -
: .
, ( )
.
.
.
. short
long, int - .
long
, short
float, double
float
,
. float
: . ,
346,2 3,462 x 102. double
;
,
<
har
A\
/ u
,
- , 'a'
30
. (*).
, , int *,
,
int.
, int,
.
,
...
struct
( )
.
struct. ,
GeoLocation,
,
: .
. ,
.
Xcode; .
AGoodStart, .
(File New New Project...).
Command Line Tool, Turkey.
main.c .
main.c , :
#include <stdio.h>
in t main ( in t argc, const char * argv[])
31
//
flo a t cookingTime;
//
//
// '* ' ' '
return 0;
>
. Run
Xcode, Command+R.
, .
Debug Turkey, .
:
The turkey weighs 14.200000.
Cook i t for 228.000000 minutes.
i | , .
main.c Xcode .
, .
:
float weight;
w eight flo a t .
:
weight * 14.2;
. ,
14.2.
:
float weight > 14.2;
:
cookingTime 15.0 + 15.0 * weight;
32
= ~ , !
(). , -1
= .
, :
w eight = 1 4 .2 ;
TwoFloats.
main() f lo a t
* 3.14 42.0.
double f lo a t .
p r in t f( ) . ,
.
if/else
.
? , Submit
? , ,
.
if /e ls e ,
:
i f () {
/ / , (tru e )
} else {
/ / , (fa ls e )
>
.
, , .
if /e ls e :
flo a t truckM eight = 34563.8;
/ / ?
i f (truckWeight < 40000.0) {
p r in t f ( " It is a lig h t tru c k \n ");
} else {
p r in t f ( " It is a heavy tru c k \n ");
>
e ls e , :
flo a t truckW eight * 34563.8;
/ / ?
&
34
4 if/else
:
true () fa ls e (). , false
0, true.
< .
, 1 (
).
, 0 (
).
. . 4.1
, (
, ).
4.1.
< -
>
<-'--
>=
== -
71^ "
== :
== . ,
= . ,
- , = ==.
=
>.
.
, ,
, 0 40 000?
AND (&&):
35
>
. 4.2.
4.2.
AND true ,
true
&&
OR false ,
false
NOT true false,
( , ,
OR Objective-C ,
.)
NOT ( ! ) ,
:
/ / ?
i f (!((tru c kW eig h t > 0 .0 ) && (truckW eight < 4 0 0 0 0 .0 ))) {
p rin tf(" T ru c k weight is not w ith in le g a l ra n g e .\n " );
, .
:
BOOL isNotLegal = ! ((truckW eig h t > 0 .0 ) && (truckW eight <
i f (isNotLegal) {
p rin tf("T ru c k weight is not w ith in le g a l ra n g e .\n " );
4 0 0 0 0 .0 ));
>
, tr u e fa ls e ,
. in t. Objective-C
BOOL,
. (, BOOL
.) BOOL ,
:
#include <objc/objc.h>
: ,
, ,
. , :
BCX)L isNotLegal = !(.(truckWeight > 0.0) && (truckWeight < 40000.0));
i f (isNotLegal)
p rin tf("Tru ck weight is not w ithin le g a l range.\n");
, ,
:
BOOL isNotLegal = !((truckW eight > 0.0) && (truckWeight < 40000.0));
i f (isNotLegal) {
p rin tf("T ru ck weight is not w ithin le g a l range.\n");
printf("Impound tru c k .\ n ");
>
- ^
? , :
BOOL isNotLegal = !((truckW eight > 0.0) && (truckWeight < 40000.0))j
i f (isNotLegal)
p rin tf("T ru ck weight is not w ithin le g a l range.\n");
printf("Impound tru ck .\ n ");
p rin tf
, .
, , i f
. , printf
. ( ? , ,
; .)
else if
?
e lse if. ,
: (floating), (light)
(heavy).
i f (truckWeight <*> 0) {
p r in t f ( "A flo a tin g truck\n");
} else i f (truckMeight < 40000.0) {
: ()
37
>
e ls e i f .
,
true. .
, . ,
,
,
. e ls e ,
, ,
.
: ()
i f e ls e
. :
in t minutesPerPound;
i f (isBoneless)
minutesPerPound = 15;
else
minutesPerPound = 20;
,
, , ?. ( ).
in t minutesPerPound = isB oneless ? 15 : 20;
. i f e ls e
. ?
, ?
.
,
i f e lse . ,
.
- , ,
!
38
4 if/else
:
in t i * 20;
in t j * 25;
int k ( 1 > j ) ? 10 : 5;
i f ( 5 < j - k ) { / /
printf("The f ir s t expression is true.
} else i f ( j >i ) { / /
printf("The second expression i s true
} else {
printf("Neither expression i s tru e." )
>
3 , : , ,
, .
. .
.
,
, ,
. , ,
.
?
, ,
. ,
,
,
.
:
C la s s C e rtific a te s .
:
in t main (in t argc, const char * a rg v [])
{
printf("M ark has done as much Cocoa Programming as
X could f i t in to 5 d a y s\n ");
p rin tf(''B o has done as much O bjective-C Programming as
I could f i t in to 2 d a y s\n ");
() &
40
>
?
? , .
(
p r i n t f ) , ,
.
, ; , .
main.c C la s s C e r tif ic a te s
main. c o n g r a tu la te S tu d e n t.
#include < std io .h >
void congratulateStudent(char *student, char *course, in t numDays)
{
printf("%s has done as much %s
Programming as I could f i t in to %d days.\n",
student, course, numDays);
>
( , %s %d? ;
.)
main,
:
int main (int argc, const char * argv[])
{
congratulateStudent("Mark", "Cocoa", 5)j
congratulateStudent("Bo", "Objective-C", 2);
congratulateStudent("Mike", "Python", 5)j
congratulateStudent("Ted", "iOS", 5);
return 0;
>
*5 |
. , ,
.
41
Xcode ;
.
. -
'congratulateStudent'. ,
.
.
, , .
Mark has done as much Cocoa Programming as I could f i t in to 5 days.
Bo has done as much O bjective-C Programming as I could f i t in to 2 days.
Mike has done as much Python Programming as I could f i t in to 5 days.
Ted has done as much iOS Programming as I could f i t in to 5 days.
, .
. (
) .
( , , ).
. ,
.
void c o n g ra tu la te S tu d e n t(c h a r * s tu d e n t, char *course, i n t numDays)
: .
.
vo id ? ,
. ,
void.
.
( ) main.
congratulateStudent ,
.
. ,
.
. c o n g ra tu la te S tu d e n t
: "Mark", "Cocoa" 5.
co n g ratu lateS tu d en t("M ark ", "Cocoa", 5 );
. c o n g r a tu la t
eStudent 5 (numOays).
t ( ) . 5 , numOays
Int... .
. . ,;, .
numDays congratulateStudent ( ) 5
numDays
. , , ,
.
C la s s C e r t if ic a t e s
. ?
? , .
. ,
, .
, Xcode , Xcode
.
.
, ,
. |
,
, .
ClassCertificates - OassCertificates.xcodeproj
Xcode
...,.,..
. _ .
i Si*
-~"V.y
f ^_j GassCertifitates
te) mainx
CUssCertfKxes.l
^J Products
utes
9
PROjCCT
'f^ GassCcrtlficates
TARCrTS
____:______...,,...w^j . J+*Jk
Build Phases
Build Rules
f lP |; ffigfe jflfj^*
\ClassCertificates
;5etting
| TAppie LtVM(Offlpl^r irQ- Wimlnes
Yes :
O>eckSwitchStatements
~aurCharacter Literals
No *
NO*
HiddenLocal Variables
mplkil Atomic Objective-Properties No t
Yes ;
mplicit Conversion to 32 Bit Type
No i
mplicit SignednessConversions
ncompieteObJectrveC Protocols
Yes *
nhibit All Warnings
No i
nJtto|izer Not Fully Bracketed
Mismatched Return Type
Yes
Missmg Bracesand Parentheses
Yes :
Missing Fields tnStructure Initializers NO
i BuifdScttfn9s
2o
+ i g| Qf <5
Modernize Prq^ct
.1
Md
Setttng
. 5.1.
:
, ,
43
. ,
.
.
, .
, - .
,
.
. , Xcode ,
.
, ,
. ,
C l a s s C e r t i f i c a t e s
. All Build
Settings. ,
Missing Function Prototypes No.
. ,
,
main .
, .
, ,
; , ,
. :
,,.
main . ,
main C la s s C e r t if ic a te s c o n g ra tu la te
Student, p r i n t f .
* ,
.
main ,
.
, , s le e p ,
, . -
Baked Chicken
!
I
I
4\
t
|
!
|
4
. 5.2.
in t main ( i n t a rg c , co n st ch ar * a r g v [ ] )
{
co n g ratu lateS tu d en t("M ark ", "Cocoa", 5 );
sleep(2);
c o n g ra tu la te S tu d e n t("B o ", "O b jectiv e-C ", 2 );
sleep(2);
co n g ratu lateS tu d en t("M ik e", "PHP and PostgreSQL", 5 );
sleep(2);
co n g ra tu la te S tu d e n t("T e d ", "iO S", 5 );
re tu rn 0;
}
. (
.) ,
2- . - ,
main , sle e p
.
:
. ,
. ,
main, m a in ().
Baui . -
- : ,
Mac OS X, ,
45
. , Mac OS X
, .
; s lee p ( )
p r i n t f ( ) .
main.c stdio.h.
p r in tf () ,
. sleep()
stdlib.h. ,
sleep ():
#include <stdio.h>
#include < s td lib .h >
{
:
,
. ,
, .
.
, . ,
,
. , iOS Mac
OS X, 16.
,
.
, .
,
. , ,
. :
void showCookTimeForTur,key( in t pounds)
<
in t necessaryMlnutes 15 + 15 * pounds;
&
46
}
necessaryM inutes .
showCookTimeForTurkey()
.
pounds .
,
.
;
. ,
.
, .
, .
,
.
. ?
. ,
, . ( )
,
, . , ,
, .
. 5.3.
: .
^ * -
^*^ ^ *
47
, showCookTimeForTurkey() :
void show C ookTim eForTurkey(int pounds)
{
>
i n t n e c e s sa ry M in u te s = 15 + 15 * pounds;
p r in tf ( " C o o k f o r %d m i n u t e s .\ n " , n e c e s s a ry M in u te s );
i n t m a in ( in t a r g c , c o n s t c h a r * a r g v [ ] )
{
>
i n t t o ta lW e ig h t = 10;
i n t g ib le ts W e ig h t = 1 ; .
i n t tu rk e y W e ig h t = t o ta l W e ig h t - g ib le ts W e ig h t;
sh o w C o o k T im eF o rT u rk ey (tu rk ey W eig h t);
re tu rn 0;
, m ain() .
main() showCookTimeForTurkey(),
.
pounds 15?
showTurkeyCookTime()
main()
pounds = 9
necessaryMinutes = 150
totalWeight = 10
gibletsWeight = 1
turkeyWeight = 9
. 5.4.
, .
, showCookTimeForTurkey() ,
main() .
: pounds, showCookTimeForTurkey(), . ,
,
. turkeyWeight 9
showCookTimeForTurkey().
pounds .
48
? ?
. , 99 *
. BeerSong
main.c, ?
main():
# in c lu d e < std io .h >
void singTheSong(int numberOfBottles)
{
i f (numberOfBottles == 0) {
p rin tf("T h ere are simply no more b o ttle s o f beer
on the w a ll.\ n ");
} else {
printf("%d b o ttle s o f beer on the w a ll, %d b o ttle s of beer.\n"
numberOfBottles, numberOfBottles);
in t oneFewer = numberOfBottles - 1;
p rin tf("T a k e one down, pass i t around,
%d b o ttle s o f beer on the w a ll.\ n " ,
oneFewer);
singTheSong(oneFewer); // T h is fu n c tio n c a l l s i t s e l f !
p rin tf( " P u t a b o tt le in the r e c y c lin g ,
Xd empty b o t tle s in the b in .\ n " ,
num berOfBottles);
)
>
tT
i;, , ,
? '^ f l H
singTheSong(99);
return 0;
>
: '.
. :
99 bottXes of beer on the waXX. 99 bottles of beer.
Take one down, pass l t around, 98 b o ttles o f beer on the walX.
98 bottles of beer on the waXX. 98 bottXes of beer.
Take one down, pass i t around, 97 bottXes o f beer on the waXX.
97 bottXes of beer on the waXX. 97 bottXes of beer.
t bottXes o f beer the waXX. 1 bottXes o f beer.
Take one down, pass l t around, 0 bottXes o f beer the waXX.
;j
49
in t h e r e c y c l i n g , 98 empty b o t t l e s in th e b in .
in t h e r e c y c l i n g , 99 empty b o t t l e s in th e b in .
, ?
singTheSongO numberOfBottles = 0
singTheSongQ numberOfBottles = 1
oneFewer = 0
singTheSongO numberOfBottles = 96
oneFewer = 95
singTheSongO numberOfBottles = 97
oneFewer = 96
singTheSongO numberOfBottles = 98
oneFewer = 97
singTheSongO numberOfBottles = 99
oneFewer 98
mainO
. 5.5.
-
, ,
. -,
: ,
? -, 6pai e , ,
( ).
u Xcode,
, .
50
,
m a in () ,
. BeerSong,
, There
simply no more bottles o fb e e r on th e wall.
? main.c
printf("There are simply no more b o ttle s of beer
on the w a ll.\ n ");
.
, .
//
//
//
v //
J BeerSony.l
jJgProduos I
//
//
#include <stdio.h>
void singTheSong(int numberOfBottles)
i f (numberOfBottles * * ) {
printf("There are simply no more b o ttle * of beer on the w all, \n*')j
} else {
printf(*'%d bottles of beer on the wall* %d bottles of b e e r.W ,
number0f8ottles, numberOfBottles);
int oneFewer * numberOfBottles * X;
printf(**Take one down, pas i t around, %d bottles of beer on the w all.\n'
oneFewer);
singTheSong(oneFewer); / / This function c alls it s e lf !
p rin tf(*P u t a bottle in the recylcing, %d empty bottles in the bin. \nM,
numberOfBottles);
. 5.6.
, .
,
. .
, ,
.
51
,
. 5 ,
. ,
(
).
.
,
, ,
oneFewer. , ,
m ain().
,
. singTheSong.
SjBeetfong- miln.c
Running tMiSong
'
ffwllngTOcSong|
7 0 slngTheSono
p | 71 .ttogTheSong
5 72 singTheSong
73 stngTheSong
074lM^hrtOflQ
QTtMfTWSong
7S singTheSong
P |7 7 singTheSong
s*ngTheSong
07ttMgTtaSeng
$ 5 *0 singTheSong
f 5 * l singTheSong
Q ttiM fT ta S o n g
Q u stngTheSong
f|M
singTheSong
Q M sk>gTheSong
fS 16 stngTheSong
0 * 7 stngTheSong
f|e a s in g T h *S o n g
f |M
singTheSong
f|e O **ngThtSong
f l l l tmgThe5ong
2 se>gTheSeng
ffn
v*ngTheSong
sMgTheSong
*7|
*tn g T h rto n g
; v o i d singTheSong(int numberOfBottles)
{.
i f (num berO f8ottles = 0 ) {
prirvtf('*Therc a re simply more b o ttle s of beer on the w a\l.\n 1*);
} e ls e {
p rin tf("% d b o ttle s of beer on the w all, %d b o ttle s of b e e r.\n '\
numberOfBottles, numberOfBottles);
in t oneFewer numberOfBottles - 1;
p rin tf(" T a k e one down, pass i t around, %d b o ttle s of beer on the w all.\n ",
oneFewer);
singThe5ong(oneFewer); / / This function c a lls i t s e l f l ^ Threadi:Stoppe^bre~.
p rin tf(* 'P u t a b o tt le in th e recy clin g , %d empty b o ttle s in the b in .\n ",
numbe rO fB o ttles);
Locel
w^^^^^^^^v^^^^^wvi^Wv^w^^^^w^^wA
;jm
^ . ^ ^ ^ ',
wall.
:4 bottles of beer on the well. 4 bottles of beer.
!Take one down, pass it aroond, 3 bottles of beer on
!wall.
!3 bottles of beer on the wall. 3 bottles of beer.
!Take one down, pass it around, 2 bottles of beer on
;wall.
:2 bottles of beer on the well* 2 bottles of beer.
Take one down, pass it around, 1 bottles of beer on
wall.
! 1 bottles of beer on the wall. 1 bottles of beer.
Take one down, pass lt around, 8 bottles of beer on
wall.
!Current languages auto} currently minieal
the
the
the
the
. 5.7.
. , ,
. ( , |
, , .)
Ila : , .
52
,
.
,
. .
, i^
, .
,
, .
, , ,
, .
return
.
, , . (
, void.)
Degrees.
main.c main() ,
. main().
#include < std io .h >
float fahrenheitFromCelsius(float cel)
{
flo a t fahr - cel * 1.8 + 32.0;
printf("%f Celsius is Xf Fahrenheit\n", c e l, fahr);
return fahr;
{
float freezeInC = 0;
float freezeInF s= fahrenheitFromCelsius(freezeInC);
prlntf("Water freezes at Xf degrees Fahrenheit\n", freezeInF);
return 0;
, fahrenheitFrowCelsius()
freezeInF f l o a t ? , ?
return
53
return. , :
f lo a t a v e ra g e (flo a t a , f l o a t b)
{
return ( + b )/ 2 .0 ;
p rin tf(" T h e mean j u s t i f i e s the end\n");
, p r i n t f ( ) .
: 0
main()? 0, :
. - - ,
1.
0 1 if; 1
true, 0 f a ls e ,
1 , 0 . ,
main () . 0 !
.
,
EXIT_SUCCESS EXIT_FAILURE,
0 1 .
stdlib.h:
#include <stdio.h>
#include < std lib .h >
f lo a t fa h re n h e itF ro m C e ls iu s ( flo a t c e l)
{
f lo a t fa h r = c e l * 1 .8 + 32.0;
p rintf("% f C e ls iu s i s %f Fah ren h eit\n ", c e l, fa h r);
return fa h r ;
>
in t m ain(int arg c, const char * a rg v[])
{
f lo a t freezeInC = 0;
f lo a t freezeInF * fa h ren h eitFro m C elsiu s(freezeIn C );
p rin tf("W a ter fre e z e s at Xf degrees Fahrenheit\n", freezeInF);
return EXIT SUCCESS;
>
.-..-;.,-/,;r.-'w off-W |H
0 EXIT_SUCCESS.
54
,
. ,
. .
, -
, la stT e m p e ra tu re .
:
#include <stdio.h>
flo a t lastTemperature;
flo a t fa h re n h e itF ro m C e lsiu s(flo a t c e l)
>
lastTemperature = cel;
- ' . ' 3
f lo a t fa h r = c e l * 1.8 + 32.0;
p r in t f("%f C e ls iu s i s %f Fahrenheit\n", c e l, fa h r);
return fa h r;
f lo a t freezeInC = 0;
f lo a t freezeInF = fa h ren h eitFro m C elsiu s(freezeIn C );
p rin tf("W a te r fre e z e s a t %f degrees Fahrenheit\n", freezeInF);
,
.
. , . ,
.
. ,
, - -
,
u
, ,
- ,
4 ?
55
,
main.c,
.
/ /
sta tic flo a t lastTemperature;
,
:
/ / lastTemperature 50
sta tic flo a t lastTemperature = 50.0;
,
.
. III,
Objective-, ,
.
180 .
Triangle.
main.c ,
. :
#include <stdio.h>
/ / Add your new function h ere
int main(int argc, const char * a rg v [])
{
flo a t angleA 30.0;
flo a t angleB 60.0;
flo a t angleC * remainingAngle(angleA, angleB);
printf("The th ird angle is % .2f\n", angleC);
return 0;
. ,"~^^^^^^^^^^^^^
, . ,
. :
( ).
,
.
printf()
, p rin tf( ) ,
. p r i n t f ( )
, . , .
C la s s C e r t if ic a t e s main.c
congratulateStudent().
>
\J
prin tf()? -
, . , .
printf() .
( , ), *
.
57
, p r i n t f ( ) , .
.
: %s, %s %d.
, ,
stu d e n t, c o u rse numDays. :
.
student co u rse , :
Cocoa has done as much Mark Programming as I could f i t in to 5 days.
. %s , ,
%d . (
, .)
: s t u d e n t c o u rs e
char *. , c h a r * .
Objective-C 14, c h a r * 34.
, \n ? p r i n t f ( )
,
. \n (
).
.
.
, . (,
) .
(, ) .
.
(), ;
, .
8-, 16-, 32- 64-.
, , .
, .
&* 0
255. ? 2 * 256 ,
0.
58
64-
9 223 372 036 854 775 808 9 223 372 036 854 775 807. p | ?
, , . 263= 9 223 372 036 854 775 80ft
,
:
UInt32 x; / / 32-
S In tl6 ; / / 1-
, ,
3.
char ;
short bj
in t ;
long d;
long long e;
//
//
//
//
//
8-
16- (
)
32- ( -
)
32- 64- ( )
64-
char ?
8- ,
char, short, in t, long long long , unsigned .
, . (
.) 32-, 64-. (
8).
Apple , 32-
32- 64- 64- :
NSInteger g;
NSUInteger h;
Apple.
long unsigned long.
Numbers.
t0 (
) p rin tf();
include <stdio.h>
Int u i n (in t argc, const char * argv[J)
59
{
in t x = 255;
p rin tf(" x is % d.\n", x );
return 0;
>
:
x is 255.
, %d
. ?
.
:
#include < stdio.h>
in t main ( in t arg c, co n st char * a rg v [])
{
i n t x = 255;
p rin tf(" x i s % d.\n", x );
printf(''In octal, x is %o.\n", x);
printf("In hexadecimal, x is %x.\n", x);
re tu rn 0;
}
. :
x is 255.
In o ctal, x is 377.
In hexadecimal, x i s f f .
( 33.)
( ,
)? % 1
( long) 11 ( long long). ,
i n t long:
#include <stdio.h>
int main (int argc, const char * argv[])
{
long x - 255;
printf("x is %ld.\n", x);
printf("In o ctal, x is %lo.\n", x);
printf(*'In hexadecimal, x is %lx.\n", x);
return 0;
>
60
&*
#include <stdio.h>
in t main ( in t argc, const char * argv[])
+, - * , .
,
: * + -. main.c
^ :
#include <stdio.h>
in t main ( in t argc, const char * argv [])
{
p r in tf(" 3 * 3 + 5 * 2 = %d\n", 3 * 3 + 5 * 2 );
return 0;
}
:
3 * 3 + 5 * 2 = 19
'
J
,
. :
#include <stdio.h>
in t main ( i n t argc, const char * a r g v [ ] )
printf("3 * 3 + 5 * 2 - %d\n", 3 * 3 + 5 * 2 );
p r in t f ( " ll / 3 - %d\n", 11 / 3 )j
61
re tu rn
0;
>
11 / 3 = 3.666667, ? .
11 / 3 3.
. (
, -11 / 3 -3). ,
: 11 3 3
2. . %
/, :
#include <stdio.h>
in t main ( in t argc, const char * arg v [])
11 %3);
return ;
}
...............................
;;
3.666667 3? in t
float .
, .
flo a t :
in t main ( in t arg c, const char * a rg v [])
{
* :
11 %3);
retu rn 0;
>
""''^ v r
'
, 3.666667. : /
,
. ,
.
, ,
. , x 1,
+ x:
62
in t x = 5;
x * x + 1; / / x 6
, >
,
. , x 1
(++):
in t x = 5;
x++; // x 6
( - - ) ,
1:
int x = 5;
x--j // x 4
x 1, 5? ,
:
int x = 5;
x = x + 5; // x 10
:
int x = 5;
x += 5; // x is 10
x +5.
+= -=, *=, /= %=.
( )
abs ( ) .
long, lab s().
stdlib.h:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, const char * argv[])
{
printf("3 * 3 + 5 * 2 = %d\n", 3 * 3 + 5 * 2);
p r in t f ( " ll / 3 * %d remainder of %d \n", 11 / 3, 11 %3);
p r in t f( ''ll / 3.0 * %f\n\ 11 / (flo a t)3 );
printf("The absolute value of -5 i s %d\n", a b s ( - 5 ) ) ;
return 0;
"
"
63
(, 3.2)
( ).
, 10
. , 345.32
3.4532 x 102. , : 32-
8 (
), 23 ;
.
/
, , .
, :
flo at g;
/ / 32-
double h;
// 64-
long double i; // 128-
p r i n t f ( ) ,
%f %e.
main.c:
int main (int argc, const char * argv[])
{
double = 12345.6789;
p rintf("y is %f\n", );
p rin tf("y is %e\n", );
return 0;
>
^ H 9 if* 6 C { n V
. :
is 12345.678900
iS 1 , 234568e+04
, Xf
, %e .
: %f 6
, .
, :
64
i n t main ( i n t a rg c, c o n s t char
a rg v [])
}
:
i s 1 2 3 4 5 .6 8
i s 1 .2 3 e + 0 4
+, -, * / , ;
. , .
, Mac manmath
:
, , ..
-
,
:
#include <math.h>
: ,
!
! main.c ,
1 .
(: 0.841).
Xcode Coolness.
, ,
( 10 ). :
#include <stdio.h>
in t m ain(int argc, const char * arg v [])
{
printf("Aaron i s Cool\n");
retu rn 0;
>
.
,
10- , , .
?
:
#include <stdio.h>
in t m ain(int arg c, const char * a rg v [])
{
printf("Aaron
printf("Aaron
printf("Aaron
printf("Aaron
printf("Aaron
printf("Aaron
printf('*Aaron
printf("Aaron
printf("Aaron
is
is
is
is
is
is
is
is
Cool\n");
Cool\n");
Cool\n");
Cool\n");
Cool\n");
Cool\n");
Cool\n");
ls
Cool\n*');
C o o l\n ");
&
66
>
.
while
w hile. while
i f , 4:
,
i f
. w h ile ,
f a l s e .
. 7.1. while
m a in () :
#include < stdio.h>
i n t m ain (in t arg c, const char * a rg v [])
{
In t 1 0;
while (1 < 12) {
>
return 0;
>
.
( i < 12) .
,
.
i .
:
, . . 7.1
- while.
for
w hile ,
:
while ( ) {
:
for. f o r :
for (; ; ) {
;
}
, for:
#include <stdio.h>
int main(int argc, const char * argv[])
{
for (int i 0; i < 12; i++) {
printf("%d. Aaron is Cool\n", i) ;
>
return 0;
>
68
. 7.2. for
,
.
, . ,
,
.
.
, 15.
break
. ,
x,
x + 90 = x2. :
0 11
. :
#include <stdio.h>
int main(int argc, const char * argv[])
{
in t i;
for ( i * 0; i < 12; i++) {
prlntf("Checking i %d\n", i) ;
i f (i + 90 i * i) {
break;
continue
69
>
. :
Checking i
Checking i
Checking i
Checking i
Checking i
Checking i
Checking i
Checking i
Checking i
Checking i
Checking i
The answer
=0
= 1
= 2
= 3
=4
= 5
= 6
= 7
= 8
= 9
= 10
i s 10.
, break .
. 7.3. break
continue
:
, , .
continue. , ,
4'io , 3, .
?
70
#include <stdio.h>
g i<if i( i -.%I3 ==
;
i ++) {
0) 1
continue;
J r in tf (" C h e c k in g i = * d \n " , i ) i
if (i +
90
-- i
1> {
break;
>
:
Checking i
Checking i
Checking i
Checking i
Checking i
Checking i
Checking i
The answer
= 1
= 2
= 4
= 5
= 7
= 8
= 10
is 10*
. 7.4. continue
do-whHe
71
do-while
do-w hile,
. do - w hile ,
. , .
,
do-while, :
in t main(int argc, const char * argv[])
i n t i = 0;
do {
printf("% d. Aaron i s Cool\n", i ) ;
i++j
} while ( i < 13);
return 0;
}
;. , ,
, d o -w h ile
:
do { - } while ( );
- do-w hile:
. 7.5. do-while
71 7
H tn m iN tr nporpMiwv. i 99 joO
"wpr* 3 T t* y w rr 5. nporpaai
Foufxi ? npr>rpWtfMM .
99
fi
9i
* 1
t?
*OuHd **'
Qrwp<n*
0 rr*
**rrfC* <
pCtNMrt |
U&tMMk *
, ,
. , 1 .
1 , 0
.
.
,
. ,
,
,
.
1
0
| ----------------------------------------------------------- ----- 1
t~~"
0
-----
--,
8.1.
.
). 32- 64- ,
, . 64- ,
, 2*.
74
Xcode : Ad
dresses.
,
.
&:
#include <stdio.h>
int main(int argc, const char * argv[])
{
in t i = 17;
p rin tf(" i stores it s value at %p\n", &i);
return 0;
}
%p
. .
:
i stores it s value at 0xbffff738
, i
. .
, ,
, , .
:
int main(int argc, const char * argv[])
int i p 17;
p rin tf("i stores its value at %p\n", &i);
printf("this function starts at %p\n", main);
return 0;
>
.
? , eot.^
31**
75
,
. ,
p tr , float,
:
f l o a t * p tr;
, ptr
float. float; ,
flo a t.
addressOfI,
int. i.
in t m a in (in t a rg c , co n st char * arg v [])
{
i n t i I 17;
i n t *addressO fI = &i;
p r i n t f ( " i s to r e s i t s v alu e a t %p\n", addressO fI);
p r i n t f ( " t h i s fu n c tio n s t a r t s a t %p\n", main);
re tu rn 0;
>
.
.
. ,
, . ,
, , .
,
. :
, , ,
.
.
, *.
, addressofI:
Int maln(int argC/ const char * arg v [])
<
Int
i 17;
int *addr*ssOfl
&i;
&
76
int i = 17;
int *addressOfI = &i;
p rin tf(" i stores i t s value at %p\n", addressOfI);
*addressOfI = 89;
printf("Now i i s %d\n", i ) ;
return 0;
}
.
, ,
. , .
*
m a in (),
addressOfI = 89;
X code
ro ' i n t ' ' i n t * '.
.
, , , '^,
, . ,
?
NULL
77
siz e o f().
:
in t m ain(int a rg c, const char * argv[])
{
in t i - 17;
in t *addressOfI = & i;
p r i n t f ( " i sto re s i t s value at %p\n", addressOfI);
*addressOfI = 89;
printf("Now i i s %d\n", i ) ;
p rin tf(" A n in t i s %zu bytes\n", s iz e o f( in t ) ) ;
p r in t f ( " A p o in te r i s %zu bytes\n", s iz e o f( in t *));
return 0;
{
in t i = 17;
in t *addressOfI = & i;
p r in t f ( ''i stores i t s value at %p\n", addressOfI);
*addressOfI = 89;
printf("Now i is %d\n", i ) ;
p rin tf("A n in t i s %zu bytes\n", s iz e o f( i) ) ;
p rin tf(" A poin ter is %zu bytes\n", sizeof(addressOfI));
return 0;
>
NULL
, ,
,
. NULL:
78
float *yPointer;
/ / myPointer NULL,
/ / .
*yPointer * NULL;
NULL? ,
.
NULL . 1 :
flo a t *wyPointer;
p 8
// *yPointer ?
I f (yPointer) {
// *yPointer NULL
... , m y P o in te r...
} >bc {
// wyPointer NULL
, , NULL
n l l . , O bjective-C n i l ,
.
flo a t :
f lo a t *powerPtr;
f lo a t* , *
:
flo a t* pow*rPtr;
1$ , J*J|>HK
1| | < w tf^
<
?
( iu*prMfiiHUi , |^
i,
, , t j
float
.tybuurtr, *
fU w t
flM t* k< c{
79
! b flo at,
P f l o a t . , ,
* :
f lo a t *b, *c;
* ,
.
, ,
f l o a t .
Mac s h o r t 2- ,
.
? ? unsigned
short .
?
i J
m odf(), double
. , 3,14
3, 0,14.
m odf(), .
. modf()
?
modf() ,
. ,
. PBR.
main.c:
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[])
{
double p i * 3.14;
double in teg erP art;
double fra c tio n P a rt;
/ / integerP art
fra c tio n P a rt modf(pi, & in te g e rP a rt);
/ / , in teg erP art
p rin tf(" in te g e rP a rt %,0f, fra c tio n P a rt * X.2f\n", integer
fra c tio n P a rt);
return 0;
>
no
81
.
, (),
.
, . :
.
.
, .
.
modf() . ,
, ,
.
, .
: . {x,y)
.
(theta, radius) theta
radius .
, ,
.
.
. 9.2.
:
void c a rte s ia n T o P o la r(flo a t x, f l o a t , f l o a t * rP tr, f lo a t *thetaPtr)
, x . ,
,
ra d iu s th e ta .
main.c
main():
#include <stdio.h>
#include <math.h>
void cartesianToP olar(float x, f lo a t , double *rPtr, double *thetaPtr)
{
/ /
*rPtr = sqrt(x * x + * );
// theta
flo a t theta;
i f (x *= 0.0) {
i f ( *= 0.0) {
theta 0.0;
//
) else i f ( > 0) {
theta * M_PI_2;
> else {
theta * - M PI 2;
>
} else {
83
th a ta a ta n (y /x );
>
/ / theta no
th e ta P tr * th e ta ;
'g H ' ,
t ,g
Pnc. t . l . c*testanTbPoH)
84
NULL
,
.
, ?
NULL, :
.
, ^
, NULL. cartesianToPo
la r ( ) :
void cartesianToPolar(float x, flo a t ,
*thetaPtr)
{
/ / rPtr NULL?
i f (rP tr) {
/ / no
*rP tr * sqrt(x * x + * );
>
/ / thetaPtr NULL?
i f (!th e ta P tr) {
/ /
return;
>
/ / theta
flo a t theta;
i f (x * 0.0 ) {
i f ( * 0.0 ) {
theta 0.0;
/ /
> else i f ( > 0) {
theta * M_PI_2;
> else {
theta - H_PI_2;
>
> tb * {
#
K*K
*bix
*Ho
. ,
. ( ,
? , .
20 , ,
30 .
, .)
f l o a t ,
, in t, .
Person.
Person : h eig h tIn Meters f l o a t w eightInK ilos in t.
: BMICalc.
main.c ,
:
#include <stdio.h>
// Person
struct Person {
float heightInMeters;
int weightInKilos;
86
10
}
-
.
. 10.1 , m ain()
.
mafnQ
struct Person
weightfnKilos = 96
heightlnMeters 1.8
p e rs o n
. 10.1.
,
, typ ed ef
,
main.c,
ty p e d e f Person:
#include <stdio.h>
/ / Person
typedef struct {
flo at heightlnMeters;
in t weightXnKilos;
} Person;
in t main(int argc, const char * argv[])
Ptrson
^ ^^
^^
person;
person. weightXnKilos * 96;
person.heigfrtInMeters 1.8;
printf("person weighs XI k ilo g ra a s\ n ", person.w eightInK ilos);
printf("person is X .2 f aeters t a ll\ n " , person.heightInM eters);
return 0;
I| ^
&
typedef. *
Per*son 1* ***
b o d y H iiiI n tf tx ( ) , P e r s o n apr>*
. / ^ i i i l n ( );
87
include <stdio.h>
// Person
typedef s tru c t {
flo a t heightInMeters;
in t w eightInK ilos;
} Person;
flo a t bodyM assIndex(Person p)
{
return p .w eig h tIn K ilo s / ( p . heightInMeters * p.heightInM eters);
>
in t m ain(int arg c, const char * a rg v[])
{
Person person;
p erson .w eig h tIn K ilo s 96;
p e rs o n . h e ig h tIn M e te rs * 1 .8 ;
f lo a t fami bodyMassIndex(person);
p rin tf( " p e rs o n has a BMI o f X .2 f\ n " , bm i);
return 0;
>
, ,
ta.
tta . :
stru ct ta (
in t
t* _ s e c ;
In t
ta _ * ln ;
in t
t* _ h o u rJ
in t
te *d a y ;
In t
ta_aon;
in t
t*_ y *e r;
In t
t> w d ly;
in t
t* jfd iy ;
in t
ty *_ |fd s t;
ch#r
/
/*
/
f/
[ 0 - 60 ] * /
[ 8 *S9 ] * /
{ 8 - B ] * /
*onth ( 1 - 31) /
/ l # - U ) /
/ 1908 * /
/ ^ { 8 - 8 }
/ 1 [ 0 -) 6 S] /
% * /
## 8 * * /
/# (0 1 nonci * /
10
' ^
|x V
stru ct ta now;
Iocaltiffie_r(&secondsSincel970, &now);
p rin tf("T h e time is %d:%d:%d\n", now.tm_hour, now.tm_min,
now.tm_sec);
, , ( -) 4 .
(: tm_mon = 0 , *
1. <tim e. h> .)
<
i^^^^^^^^^^i2^CiuJi=^U=^-====.'===;,^_=_.==i=__^__^i^Liui^^2^^=^-=,=i^^feMiiiB^
,
.
. ( -
.)
. ,
,
, .
, ,
.
.
(, , ,
Youtube.)
m a llo c ().
, (heap),
. , f r e e ( )
. ,
, 1000 f l o a t .
#include <stdio.h>
#include <stdlib.h> / / malloc free std lib
int main(int argc, const char * argv[])
{
//
float *startOfBuffer;
/ /
&
90
11
startOfBuffer = malloc(1000 * s iz e o f ( f lo a t ) ) ;
//
. . . .. .
/ /
>
sta rtO fB u ffe r
.
. 11.1. , ,
,
.
,
.
malloc ()
. ,
Person, :
#include <stdio .h >
in c lu d e < s td llb .h >
typedef s tru c t {
f l o a t heightInM eters;
In t w eig htIn K ilo s;
} Person;
91
{r e tu r n
>
p - > w e ig h t I n K ilo s /
i n t m a in ( in t a rg c , c o n s t c h a r * a r g v [ ] )
/ / Person
Person * x - (P e rs o n * ) m a llo c ( s iz e o f ( P e r s o n ) ) ;
/ /
x - > w e ig h t I n K ilo s = 8 1 ;
x - > h e ig h tIn M e te r s = 2 . 0 ;
/ /
f l o a t xBMI = b o d y M a s s In d e x (x ) ;
p r i n t f ( " x has a BMI o f = % f \ n " , x B M I);
/ /
fr e e ( x );
//
x = NULL;
re tu rn 0 ;
- >. p->weightInKilos :
p weightInKilos>.
. , Objective-C.
.
Objective- Foundation
, , ,
, Objective-.
,
.
Objective- Foundation
, . ?
...
.
, , .
,
. , ,
, ,
.
1980-
.
.
Objective-C.
.
, ,
. Objective-C
,
.
.
,
.
.
.
, iPhone ,
CLLocation. CLLocation
CLLocation. CLLocation
: ,
. . ,
CLLocation,
CLLocation.
95
Objective-C.
(Command Line Tool),
Foundation (. 12.1). TimeAfterTime.
Chooteoptionsforyo*irniwproject
- - -------- ----
. 12.1. Foundation
Objective-C .m.
main.m, :
#import <Foundation/Foundation.h>
int main (in t argc, const char * argv[])
autoreleasepool {
NSDate *now = [NSDate d a te ]j
NSLog(g"The new date liv e s at %p", now);
}
>
return
!
date NSDate. date NSDate
NSDate, /
, .
now. * ^
NSOate.
NSLog() Objective-C, p rin tf(); yt$w^
^ , % <*
. |^
\n.
. ^
2011-08-05 11:53:54.366 T im eA fterT im e [4862:707] The new date liv*t at
0x100114dc0
p rin tf() NSLog() ^
, , .
, NSLog(),
.
NSLog() %p . ^
, %@,
:
#import <Foundation/Foundatlon. h>
int main (in t argc, const char * argv[])
0 autoreleasepool
{
NSOate *now = [NSDate date];
>
return
:
The date is 2011-08-05 16:09:14
+0000
:
, ;
.
( ) W
.
97
NSDate . NSDate
( ) /, -
, 0:00 ( ) 1 1970 .
, tim eIntervalS incel970
NSDate, now.
#im port < F o u n d a tio n /F o u n d a tio n .h >
i n t main ( i n t a rg c , c o n s t c h a r * a r g v [ ] )
@ a u to re le a se p oo l {
NSDate *now & [NSDate d a t e ] ;
NSLog(0"The d a te i s %@" now );
>
return 0;
, d a te
100 000 .
d a te , d a te .
: .
d a te m ain():
#import <Foundation/Foundation.h>
in t main ( in t argc, const char * arg v [])
0autoreleasepool {
NSDate *now = [NSDate d a te ];
NSLog(@"The d ate is %@, now);
double seconds [now tim eIn terv alS in cel970];
N5Log(0"It has been %f seconds sin ce the s t a r t of 1970.",
seconds);
NSDate * la te r [now dateByAddingTlmeInterval:100000];
NSlog(#"In 100,000 seconds i t w ill be %@", la te r);
>
If
return 0;
98
12
100 000 .
: ,
. 12.2.
. 12.3 .
NSDate . now l a t e r ^
main(). NSDate ( )
main()
now = D
later =
. 12.3. TimeAfterTime
^_
99
id
,
:
NSDate * e x p ira tio n ;
, ,
. id,
- O bjective-.
id:
id d eleg a te ;
(* )
id .
, ,
. ,
.
,
.
NSDate
. : d a te ,
. . :
NSDateComponents *comps = [[NSDateComponents a l l o c ] i n i t ] ;
[comps setY ear:1 9 6 9 ];
[comps setM onth:4];
[comps setD ay:30];
[comps setH o u r:1 3 ];
[comps setM in u te:1 0 J;
[comps se tS e c o n d :0 ];
NSCalendar *g = [[N SCalendar a l l o c ]
in itW ith C a le n d a rId e n tifie r:N S G re g o ria n C a le n d a r];
NSDate *dateOfBirth * [g dateFromComponents: comps];
NSDate tim e In te rv a lS in c e D a te :
double d [laterDate tim e I n t e r v a l S in c e D a t e : e a r l ie r D a t e J ;
1
*
Mei
!
NSDi
12 .
M
u ^H
^|
N S D a te
NSD
*now = [NSDate d a t e ] ; i
date . ,
NSDate. date '
NSDate.
double seconds = [now timeIntervalSincel970];
timeIntervalSincel970 .
, M
erc*
timeIntervalSincel970 double.
NSDate *later = [now dateByAddingTimeInterval:100000];
dateByAddingTimeInterval:
,
NSDate.
alloc ,
. ,
init. alloc in it
Objective-C. #
flr
:
[[NSDate alloc] in it 3>
CJ
#ini
in t
101
,
. , NSDate
a llo c , ( )
i n i t .
i n i t (
, a llo c ),
i n i t . ,
NSDate *now = [NSDate d a te ] ;
. , NSDate
, .
NSCalendar. NSCalendar,
, . NSCalendar
main.m:
#import <Foundation/Foundation.h>
in t main ( i n t a rg c , c o n st ch ar * a rg v [])
@ autoreleasepool {
NSDate *now = [[NSDate a llo c ] i n i t ] ;
NSLog(0"The d a te i s %@", now);
double seconds * [now tim e In te rv a lS in c e l9 7 0 ];
NSLog(0"It has been %f seconds sin c e th e s t a r t o f 1970."*
seconds);
NSDate * la te r - [now dateByAddingTimeIrtterval:100000];
NSlog(#"In 100,000 seconds i t w ill be %@", l a t e r ) ;
NSCalendar *c a l [NSCalendar cu rren tC alen d ar];
MSUInteger day [c a l ordinalityOfUnit:NSDayCalendarUnit
in U n it:NSMonthCalendarUnit
fo rD ate: now];
102
13
>
return
>
Coo6ujeHHeHa3bmaeTCHordinalityOfUnit:inUnit:forDate: ^
. .
.
. I
Objective-C , 1
. ( Xcode f
, ,
. ,
Xcode.)
NSDayCalendarUnit
NSMonthCalendarUnit. NSCalendar.
, .
, .
,
:
,
i**<^# *
NSUInteger hour = [cal ordinalityOfUnit:NSHourCalendarUnit
inUnit:NSYearCalendarUnit
forDate:nowJ;
|
y^
ei
(%
nil
- n i l
, . Objective-C n il
( NULL 8).
- ni
s
. n^PKTV ,
v
_ ,.^
nil.
:
i f (fido I- n il) {
[fido goGetTheNewspaperJ;
>
103
Objective-C , n il
; . ,
:
Dog *fido = n il;
[fido goGetTheNewspaper];
1: ,
, ,
n il.
2: n il,
.
Dog *fido = n il;
Newspaper *d a ily * [fid o goGetTheNewspaper];
d a ily . ( ,
,
nil . ,
.)
Mac NSTimeZone.
systemTimeZone,
( NSTimeZone), isDaylightSavirigTiroe, YES,
.
Foundation, ,
.
14
NSString
, TimeAfterTime :
NSLog(0"The date ls %@, now);
length:
NSUInteger charCount [x le n g th ];
ls E q u a l: :
i f ([lam ent ls E q u a l:x ])
.
C.*
char *lament "Why mel?";
char *x;
asprlntf(& x, "The best number is %d", 5)j
105
s lz e _ t charCount = s t r l e n ( x ) ;
l f (s trc m p (la m e n t, x ) == 0)
p r in tf( " % s and %s a re e q u a l\n " , la m en t, x ) ;
fre e (x );
|v 34. , ,
NSString . NSString ,
. , NSString (
)
. ? .
? .
NSHost .
NSHost NSHost currentHost.
NSHost:
+ (NSHost *)currentHost
NSHost localizedName, eKTNSString:
- (NSString *)localizedName
Foundation, *
. ( .)
NSArray
0autoreleasepool {
/ / NSDate
NSDate *now = [NSDate d a te ];
NSDate *tomorrow =
[now dateByAddingTimeInterval:24.0 * 60.0 * 60.0];
NSDate *yesterday *
[now dateByAddingTimeInterval:-24.0 * 60.0 * 60.0];
/ / *
/ / (n il - )
% NSArray *dateList = [NSArray arrayW ithObjects:now, tomorrow,
yesterday, n iI];
/ / ?
NSLog(0"There are %lu dates, [dateList count]);
/ /
NSLog(@ The
NSLog(@"The
NSArray
>
107
re tu rn 0 ;
NSArray , ,
:
I count: ;
objectA tIndex: , ,
| .
,
. :
0, 1 . . , count
, 100 , objectAtIndex: 0 99.
. 15.1 . :
NSArray NSDate.
. 15.1. DateList
for. main.m:
#import <Foundation/Foundation.h>
int main(int argc, const char * arg v [])
0autoreleasepool {
/ / NSDate
NSDate *now * [NSDate date];
108
15 NSArray
>
>
return
>
,^
fo r (
). :
#import <Foundation/Foundation.h>
int main(int argc, const char * arg v[])
0 autoreleasepool
/ / NSDate
NSDate *now = [NSDate date]j
NSDate *tomorrow =
[now dateByAddingTimeInterval:24.0 * 60.0 * 60.0];
NSDate *yesterday *
[now dateByAddingTimeInterval: -24.0 * 60.0 * 60.0]i
/ / *
/ / (n il - )
NSArray *dateList ,.
[NSArray arrayWithObjects:now, tomorrow, yesterday, ni Jj
for (NSDate *d in dateList) {
NSlog(0"Here is a date: %#", d);
>
>
return 0;
NSMutabteArrsy
109
?
6ops . :
.
NSMutableArray
NSArray .
u .
NSMutableArray NSArray,
. (NSMutableArray NSArray.
18.)
,
NSMutableArray:
NSMutableArray
autoreleasepool {
/ / NSDate
NSDate *now [NSDate d a te ];
NSDate *tomorrow *
[now dateByAddingTimeInterval; 240 * 60.0 * 6 0 .0 ];
NSDate *yesterday
[now dateByAddingTimeInterval:*24.0 * 60.0 * 60.0];
/ /
NSMutableArray * d a te tis t [NSMutableArray arra y ];
/ /
[d a te list addObject: now];
[dateLlst addObject:tomorrow];
/ / yesterday
(datelist insertQbject:yesterday atlndex:0]j
for (NSDate *d in d a te L is t) (
NSlog(f"Here is a date: %#", d);
&
110
15 NSArray
// yesterday
[d a te L lst rem oveO bjectA tIndex : 0] j
NSLog(@"Now the f i r s t date l s X", [d a te L ls t o b je c tA tir^ ,
>
re tu rn 0;
>
F o u n d a t i o n Grocerfe
NSMutableArray,
. ( .) , |
.
,
#im port < F o u n d atio n /F o u n d atio n . h>
i n t main ( i n t a rg c , c o n st c h a r * a r g v [ ] )
{
' ''']^
0 a u to re le a s e p o o l {
//
// ( )
//
//
f o r (NSString *n in names) {
/ / - - ^.
NSRange r = [n r a n g e O fS t r ln g :fW options.N SCaseInsensiti*
Search];
// ?
111
i f ( r .l o c a t io n 1 NSNotFound) {
NSLog(@"X@", n ) ;
}
>
* return
}
0;
>
/usr/share/dict/propem am es
, /u sr/sh a re/d ict/w o rd s (
).
,
(Glen , glen ).
words .
,
.
c a s e In s e n s itiv e C o m p a re :
NSString * = @"";
NSString *b = @"";
i f ([a caseInsensitiveCompare:b] == NSOrderedSame) {
NSLog(@"a and b are equal");
>
i f ([a caseInsensitiveCompare:b] == NSOrderedAscending) {
NSLog(@"a comes before b");
}
i f ([a caseInsensitiveCompare:b] == NSOrderedDescending) {
NSLog(@"b comes before a");
NSArray
(
), .
Apple.
Xcode, Organizer
( X code)
Documentation.
. 16.1.
Apple :
I : Objective-C
.
:,
. ,
, Mac iOS
.
| : , ,
Apple . ,
WeatherMap ,
iOS.
eepcuu\ Mac OS
iOS ,
.
, , ,
:
.
, .
.
Organizer,
. NSArray;
. Reference NSArray,
NSArray.
. Apple
, .
.
,
, .
, , ( ,
, 17).
, .
Orfmlitr 1Do<umentetkm
& ^^
^ tywI
| *&
>***ffMV*'%CM
EjT
NSArray Class Reference
NSOW#tt
NSCodlng
NSCopyifig
NSMutabl*topy1np
NSfastfnumeutlon
NSObJatTfN50bjfttt)
NSArr#y
^^yCoM^fw
lyntmCuMn
m 1SMemKMrtn
- NSArray
, * NSArray
;^
O vtt FAQ
fA Memory Man*gemem Usmg Drtaj
_'_ fwchtnQ Min*fl*d Obj*cti
; : Table v>ew or out.. Co*urotof obJ*cr J
, - C o n tn d CO(o< KmtH^i
;,v '^ c o tttc H o n O p tm rto n
^ jC M b c M n O p f f tttf s
i^W SAfrayC**mHer
Toois C w H ti
Coco
Framework
ftysMm/Ubraty/Franwvorkt/Foundaiion.f'A<n***offc
AvaltabtIity
Declared ln
N5Arfty.h
NSKeyValueCodlng.h
NSKeyValueObservmg.n
NSPathUtUttiea.h
NSPredicaie.h
NSSorxOescriptor.h
Companion 9ukles
Sfcaw4Me***jMuH*
| 7MMMyCMitfofltfi
$ tnMndvi
%| SowrceVMw
ft; EnhwrcA<K>*tMum
if QTKitMovtcShuffW
; ''
Statth~U2
Bfl|ffre
. 16.2. NSArray
NSArray
. ,
N SO bject ( 18).
( 25).
Foundation Mac OS X
iOS.
NSArray , . Colkctions Programming Topics, .
( NSArray N SM utableArray).
, ,
.
,
NSArray.
NSArray?
, NSArray. , ,
? c o n t a in s O b je c t :
.
<ve*
16.3.
containsObject:
Retums a Boolean value that indicates whether a given object is present in the array.
-
( BOOL) c o n t a in s O b je c t s ( i d ) a n O b je c t
Parameters
anObject
An object.
Return Value
YES if anObject is present in the array, otherwise NO.
Discussion
This method determines whether anObject is present in the array by sending an
ieEquals message to each of the array's objects (and passing anObjecta% the parameter
to each isEqual s message).
Availability
Available in Mac OS X vl0.0 and later.
See Also
~ indexOfObject*
~ indexO fO bjeotIdenticalT oj
Related Sample Code
Sketch+AccessibHity
TimelineToTC
Declared In
N8A rra y.h
. 16.4. o containsObject:
11S
116
16
*i
.
, *
, .
Organizer D a te L is t. ^
[ d a t e L i s t a d d O b je c t:n o w ]. *
a d d O b je c t:.
.
@autoreleasepool {
// Create three NSDate objects
NSDate *now [NSDate d ate ];
NSDate *tomorrow = [now dateByAddingTimeInterval:2*
NSDate *yesterday = [now dateByAddingTimeInterval:// Create an array
NSMutableArray * d a teList = [NSMutableArray arrayI;
// Add the dates to the array
[dateList addObject:now];
[dateList ;add^ 'iect:tom orrow ];
O
addObject:
ffi
Name addObject:
Declaration:- fvoid)addOt>ject:(id)anObject
Avaitebility: Mac OS X(10.0 and later)
Abstract: fnserts a given obJta at the end of the array.
Parameters;
anObject: The object to add u> thc end ofthe array's content
Dedared im NSArray.h
Reference: NSMutableArray Class Reference
Related Documents: Collections Programming Topics, Key-Value
Coding Programming Guide
ig o f the
r atIndex:
. 16.5.
.
, O rg an ize r. ,
?
,
, Xcode. Xcodf
View,
117
gpgp^ggJi , Xcodc, /
/ <*
.
, ,
. , ,
.
( U t i l i t i e s ) . View,
Utilfties. ,
.
, .
: NSMutableArray:
Q OMUH ma*nm
nWMn|OMW
.;
ftWMl
WM
/ / C reate th re e NSOat.e o b je c ts
NSJ>atc *oow * (NSOatc dateI;
HbUate *tonorrow (now d ate8yAcMlr*qTi^eIot
NSOni^ yesterday a [now rt<jtf*FyAddiogTtmr7n
*(|1<
A*Mrwa&#***M m
*^
nMMtfftt v*4*ftbt*ct* ?taM
?-
/ / re a te an array
NSHutabieArrey *d ateL ist
O
nM
M
tftaM
Af^M
M*tMU *9 CtaM
toSMutai
(,
^
&mfaierip*inffb*th*, n ^ t-m,
16.6.
,
, ,
.
Option,
Organizer .
,
Command, Xcode , -
118
16
. ( Command
. .
ableArray).
Run Stoo
Sriinmo ,.pipppi
IIe Ag*pTs: ^ Ti
/^^*^aMnMs***** Mutable
I V|SjQ*tcUu
i
1
| g in te rfa c e NSMutableArray : NSArray
; j omust.i
QSSupp0ftln9 Flttf
QgfrW9*rofki
i' ;.produCt*
| |~
I~
^gji&Ufe
' '>^nurfK*
p***************/
( v o id )a d d O b je c t:( id )a n O b je c t;
(v o id )in s e rtO b je c t:(id )a n O b je c t atIndex: (NSUInteger)index;
( v o id ) rem oveL astO bject;
( v o id ) removeObj e c tA tIn d e x : (NSUIntege r ) in d e x ;
(void)replaceO bjectA tIndex:(N 5U X nteger)index wlthObject:(id)anObjecf
Qend
in te rfa ce NSMutableArray (NSExtendedMutableArray)
. 16.7. NSMutableArray
,
Command . ,
Command addObject:.
Xcode ,
.
.
Xcode,
Apple http://
lists.apple.com/] .
,
. (
, , ,
,)
: stackoverflow.com.
, *
. ,
, , .
, Apple.
. ,
:
( ), ;
, .
Person, Person,
10. : Person.h Person.m.
Person.h, ,
. Person.m
. ,
.
: Foundation
BMITime.
, F ile New New File....
Mac OS X , Cocoa Objective-C
class. Person NSObject.
, , BMITime,
Save.
, Person.h
Person.m. Person.h,
:
#import <Foundation/Foundation.h>
/ / Person
/ / , NSObject
0interface Person : NSObject
&
120
17
'*
''"^ffiH i
//
flo a t heightlnMeters;
in t weightInKilos;
I
// ,
//
- (void)setH eightInM eters:(float)h;
- (void)setW eightInKilos: (int)w;
// ()
- (float)bodyMassIndex;
@end
: *
, .
:
P e rs o n ,
NSObject. :
f l o a t h e ig h tln M e te rs i n t weight*
In K ilo s . ,
Person.m.
s e tH e ig h tI n M e te r s : f l o a t
, s e tW e ig h tIn K ilo s : i n t
, bodyM assIndex
f l o a t .
P e r s o n . m.
, :
#import "Person.h"
^implementation Person
- (void)setHeightInM eters:(float)h
{
heightlnMeters = hj
>
- ( v o id )s e tW e ig h tI n K ilo s : ( in t) w
weightInKilos * w;
>
* (float)bodyM assIndex
{
121
>
0end
, Xcode Person.h .
,
, . Xcode ;
, Xcode
.
, , Person.h, ; .
main.m, :
#import <Foundation/Foundation.h>
#import "Person.h"
@ autoreleasepool {
// Person
Person *person = [[Person allo c] in it ] ;
//
[person setWeightInKilos:96];
[person setHeightInMeters:1.8];
// bodyMassIndex
flo a t bmi = [person bodyMassIndex];
NSLog(0"person has a BMI o f %f", bmi);
>
return 0;
}
. Person.h ,
,
Bnain().
. 17.1.
122
17
, ^
m ain():
^
person.weightInKilos = 96;
person.heightInMeters = 1.8;
- ^
, ,
. Person ^
, s e tW e ig h tIn K ilo s : setHeig^,
InM eters:. s e t - ( )
Set- ^
Get- ( )
. S et- g e t- .
Person.h g e t-:
#import <Foundation/Foundation. h>
@ interface Person : NSObject
{
f l o a t heightInM eters;
i n t w eightInK ilos;
>
//
- (float)heightInMeters;
- ( v o id ) s e tH e ig h tI n M e te r s :( f lo a t) h ;
- (int)weightInKilos;
0end
g e t- g e t
s e t -? Objective-C.
.
Person.m g e t -:
^implementation Person
- (float)heightInMeters
123
|}
- ( v o id )s e tH e ig h tI n M e te r s :(f lo a t) h
{
heightlnMeters = h;
J}
- (int)w eightInKilos
{
>
%- (void )setW eig h tIn K ilos:(in t)w
k|
w eightInKilos = w;
: >
- (float)bodyMassIndex
{
return w eightInK ilos / (h eig h tln M eters * heightlnM eters);
>
@end
main.m\
#import "Person.h"
int m ain(int arg c, const char * a rg v [])
{
@ autoreleasepool {
// Person
Person *person = [[Person a llo c ]
j>^'
in it ] ;
//
[person s e tW e ig h tIn K ilo s :9 6 ];
[person s e tH e ig h tIn M e te rs:1 .8 ];
// bodyMassIndex
f lo a t bmi = [person bodyMassIndex];
12 4
17
//
Objective-C . ~
1 ^ ,#
. **% I ,eJ u^
:
^ I ^ %
P = fx f i d o ] ;
p = x .f i d o ;
j / ^
I J jp j I
I J^ ^ i
[x s e tF id o :3 ] ;
x .f i d o = 3;
,
.
.
'
. I
,
| sdf
Person . Apple |
, , -
. set- g e t -
.
Person.h se t- g e t-
0property:
#import <Foundation/Foundation. h>
0interface Person : NSObject
{
flo a t heightlnMeters;
in t weightInKilos;
>
0property flo at heightlnMeters;
#property in t weightInKilos;
> (flo at)b o d yM assIn d ex;
0end
i
3fe
"*ig!
Ma AppJ,
;*
1X1
~
.
Person.m. , *
^ p r o p e r t y .
0 s y n th e s iz e :
#import "Person.h"
^implementation
Person
,
- (float)bodyMassIndex
>
: _,,: , :
,, ,;
@end
. , ,
.
self
i Apple
s e lf .
, . s e l f ,
. ,
Objective-C
;
, . bodyMassIndex,
:
- (float)bodyMassIndex
{
flo a t h = [ s e lf heightInMeters];
return [ s e lf weightInKilos] / (h * h);
}
P erso n , heightInM eters
w eightInK ilos, .
s e l f ,
. , Person
ad d Y o u rselfT o A rray : :
126
17
- (void)addYourselfToArray:(NSMutableArray *)theArray
{
>
s e lf ,
Person .
#$
: |
Person.m. ( Person.h , *|
.) j
, .
Objective-C.
. , ,
.
, .
Xcode ,
.
17.2. StockMolding
127
Foundation Stocks.
StockH olding .
^roT NSObject.
f lo a t purchaseSharePrice currentSharePrice
I n t numberOfShares.
.
^:
/ / purchaseSharePrice * numberOfShares
- (float)valueInDollars; / / currentSharePrlce * numberOfShares
m aln() StockHolding.
.
Person NSObject.
Person
, NSObject, ,
Person. , Person NSObject. .
BMITime : Objective-C
Employee, N SO bject.
Employee P erson. , ?
(Employee) (P erso n ). .
.
,
, .
r
I
NSObject_______ |
}
i
I
I-- ____________________i
J (NSString *)description
**
*'
*
I
- ,*1
, int *
Jfloat heightInMeters
*.*(ftoet^xxiyMa&slndex j
i------------ 1..................
/
9
'^ w
-%
'
NSD ate............. " ~
NSStrtnfl----_"____
-1 -1
~~..~,*w . ,m
m~~mm mn<.1 i|
i i
".- -A^jy3BH
***#*+
4Hw*****M^*%fc**Mto^*MJb^'^*<*
&**^&*^*^**&^ ^0'^t^^w^ ^w
^**H
P**^-^*B
*l*,*,l***,l^4,l*l,^*,*^***^**^*^^*^**^^g^ek^^
- (ck>uble)timeintervalSince1970 - (NSUInteger)^vP;.---*
NSArray
- (NSUInteger)count;
..................................* ...................................
wherite from
tntmrtto trom
r
&mpk>ym9
*wrt #mpk>yMlD
. r
i
. . J . . . . v
. ,
NSMutabl*Array
4
%*+.*+~.*
(votd)addOb|ect:(k^)x;
i
i
i
t
i
18.1.
U9
Employee.h. Person.h,
person
:
#import "Person.h"
@interface Employee : Person
in t employeeID;
>
0property in t employeeID;
@end
Employeem :
#import "Employee.h"
^implementation Employee
^synthesize employeeID;
@end
Employee,
P e rso n employeeID.
Employee , Person.
, Em ployee setEmployeeID:
employeeID.
P erso n NSObject, Employee
NSObject. (
) N SO bject.
N SO bject ,
: i s a . i s a ,
.
, fid o .
, is a :
fid o ?
f id o , . ,
:
fido? f i d o
. fid o
. NSObject : , fido
>, -
Employee fid o .
130
18
............NSObject..........|
C lass isa
~^
- (NSString *Wescriptioiri
-----------------------------------
Person
J int weightlnKilo
i float heightlnMeters
i - (float)bodyMasslndex
................... I .................
. 18.2.
main.m Persor
, :
in t m ain(int arg c, const char * a rg v [])
{
@ autoreleasepool {
/ / Person
id person = [[Person a llo c ] i n i t ] ;
/ /
[person setW eightInK ilos:96];
[person se tH e ig h tIn M e te rs:1 .8 ];
/ / bodyMassIndex
f l o a t bmi = [person bodyMassIndex];
NSLog(@"person (%d, %f) has a BMI o f %f",
[person w eig h tIn K ilo s], [person heightlnM eters], ^9 '*
[person count];
>
return 0;
}
U1
. (
, .
!)
:
*** Term inating app due t o uncaught excep tio n
'NSInvalidArgumentException*,
reason: -[P e rso n c o u n t]: unrecognized s e l e c t o r sen t to instance
0xl00108de0'
,
.
Employee, .
main.m, Employee:
#import <Foundation/Foundation.h>
#import "Employee.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// Person
Person * person = [[Employee a llo c ] in it ] ;
//
[person setW eightInKilos:96];
[person setH eightInM eters:1.8];
// bodyMassIndex
flo a t bmi = [person bodyMassIndex];
NSLog(@"person (%d, %f) has a BMI o f %f",
[person w eig htInK ilos], [person heightlnMeters], bmi);
>
return 0;
: p e rso n -
Person. ?
, . ,
(Employee) (Person)
, . ,
Employee , Person.
, Employee,
- :
132
18
f ia p o rt
# i* p a rt
" E * p lo y e e .h -
0autoreleasepool {
// Person
Employee *person = [[Employee a llo c ] i n i t ] ;
//
[p e rs o n s e tW e ig h tIn K ilo s : 9 6 ];
[person setH eightInM eters:1.8];
[ p e r s o n s e tE m p lo y e e I D :1 5 ] ;
/ / b o d y M a ss In d e x
f lo a t bmi = [person bodyMassIndex];
>
retu rn 0;
,
.
; ,
. , .
19.
bodyMassIndex Employee.
Employee.m :
# im p o r t "E m p lo y e e .h "
^ im p le m e n ta tio n Em ployee
^ s y n th e s iz e e m p lo y e e ID ;
-
( flo a t) b o d y M a s s In d e x
t
fend
re tu rn 19.0;
,
v - i^ ^ ^ ^ ^ ^ ^ ^ ^
133
,: . :
bodyMassIndex, Person.
1 bodyMassIndex Employee. m,
jEmployee.h.
, .
Employee Person, , Employee
$ bodyMassIndex. .
super
, ,
Person, 10%? ,
Employee,
bodyMassIndex Person 0,9,
. super.
Employee.m:
#import "Employee.h"
^implementation Employee
^synthesize employeeID;
I
- (flo a t)b o d y M a s s In d e x
I<
DBoa{
II
iM
tra
@end
.
, super : ,
.
| .
| F o r e ig n S t o c k H o ld i n g , S to c k H o ld in g .
F o r e ig n S to c k H o ld in g
conversionRate, f l o a t . ( conver| *ionRate . ,
134
18
purchasePrice currentPrice .)
co stIn D o llars valueInD ollars. .
m a in ( )
ForeignStockHolding.
,
, , in t flo a t.
.
. ,
:
: -
, N S S tring NSNumber. ,
Employee N SString.
Employee ,
N SString.
: .
, ; Employee
,
Person.
:
, NSMutableArray. (
21.) , ;
,
NSM utableArray
Person.
N S S trin g NSString.
, ,
.
13
19
. 19.1. Employee
, ( ). , Employee
: lastName, spouse children.
Employee :
0 in t e r fa c e Employee : Person
>
in t employeeID;
NSString *lastName;
Person *spouse;
NSMutableArray * ch ild ren ;
, employeeID, .
. *
spouse , &
spouse Employee, Person,
. . >*
( ),
, .
( )#11
:
. , *
, ^*
.
ARC
13 7
. 19.2.
.
,
(
).
,
. (, iPhone)
,
.
ARC
. , ,
, .
, ,
. , Person
: Employee Child.
, ,
, .
ARC (Auto
mated Reference Counting) - Objective-C .
138
19
Xcode 4.2
. ( 0
, 20. , *,
, , ARC.)
BMITime ,
. , ^
. J
Asset, Employee
, .
. 19.3.
/:
( Employee) (
NSMutableArray Asset).
Asset
NSObject. Asset. Asset.h, :
#import <Foundation/Foundation.h>
@in te rfa c e Asset : NSObject
{
>
NSString *label;
unsigned in t resaleValue;
ARC
139
s t r o n g ( d p r o p e r t y
l a b e l . : ,
*. (
20.)
, , , .
d ealloc. (
dealloc NSObject.) dealloc
Asset.
, Asset , NSObject, d e s c r i p t i o n .
.
3K3eMmwpoBAsset eodescription ,
label resaleValue .
A sset.m .
, d e s c r ip tio n d e a llo c .
#import "A sse t.h "
^im plem entation A sset
^synthesize la b e l, re s a le V a lu e ;
- (NSString * ) d e s c rip tio n
, [ 6
>
- (v o id )d e a llo c
{
NSLog(Q"deallocating %@", s e l f ) ;
>
@end
%@
.
( ,
).
, ,
.
Command+B.
, ,
.
140
19
^
j ^
. , \ ^
.
Employee
Employee . ,
(, )
, .
,
:
,
.
,
.
Employee,
,
. .
Employee.h :
#import "Person.h"
0class Asset;
i n t employeeID;
NSMutableArray *assets;
>
@property i n t employeeID;
- (void)addAssetsObject:(Asset *)a;
- (unsigned int)valueOfAssets;
$end
@ class A s s e t;.
A sset. 111
, . @ class A s s e t ; *'
v
V*
flo 6 w u w w f * * Cmptoyti
141
,
@class #import
uie , Mw
f c l i s s Hmpht/rr.h :* .
e 1111 i
.
kmployce.n\,
( ), | \r
- . ^
( Employee)
, .
#import "Employee.h"
#import "Asset.h"
-;.
; - ?^&
/ /
>
>
- (unsigned in t)valu eO fA ssets
{
/ /
unsigned in t sum 0;
fo r (Asset *a in assets) {
sum += [a re sa leV alu e ];
>
retu rn sum;
>
- (flo a t)b o d y M a s s ln d e x
i
f l o a t normalBMI * [su p er bodyM assIndex];
r e tu rn normalBMI * 0 .9 ;
>
&
142
19
{
retu rn [NSString stringWithFormat:0"<Employe* %d: $%d i n i l l f t
[ s e l f employeeID], [ s e l f v a lu e O fA s s e ts ]];
>
' :' - :t
- (v o id )d e a llo c
j
N SLog(0"deallocating %@", s e l f ) ;
>
@end
E m ployee.m
A sset, Asset.h
@class.
d e s c r ip tio n dealloc
Employee.
, .
.
main.m:
# im p o rt < F o u n d a tio n /F o u n d a tio n .h >
# im p o rt "E m ployee.h"
#import " A s s e t.h "
K (|^ ^ ^ ^ ^ ^ ^ ^ H
i n t m a in ( in t a r g c , c o n s t c h a r * a r g v [ ] )
I
@ a u to re le a s e p o o l {
// Employee
NSMutableArray *employees = [[N SM utableArray a llo c ] in it];
f o r ( i n t i = 0; i < 10; i++) {
'^ K ': / )
// Employee
Employee *person = [[Employee a l l o c ] i n i t ] ;
//
[person s e tW e ig h tIn K ilo s:9 0 + i ] ;
[person se tH e ig h tIn M e te rs:1 .8 - i/ 1 0 .0 ] ;
[person setEm ployeeX D :i];
// employees
[employees ad d O b ject:p erso n ];
>
// 10 Asset
fo r ( in t i = 0; i < 10; i++) {
// Asset
Asset *asset = [[A sse t a llo c ]
in it ] ;
//
NSString * cu rre n tL a b e l =
[N SString strin g W ith Fo rm at:0"Laptop %d", i ] ;
[a sse t s e t L a b e l:c u r r e n t L a b e l] ;
[a sse t s e tR e s a le V a lu e :i * 17];
// 0 9
NSUInteger randomIndex = random() % [employees count];
//
Employee *randomEmployee =
[employees ob jectA tIn dex:random Index];
//
[ randomEmployee a d d A s s e ts O b je c t: a s s e t ] ;
}
/ ! ; ^ -
>
re tu rn
0;
>
"
. :
Employees: (
"<Employee
"<Employee
"<Employee
"<Employee
"<Employee
"<Employee
"<Employee
0:
1:
2:
3:
4:
5:
6:
&
144
19
)
Giving up ownership of one employee
d ea lloca tin g <Employee 5: $136 in assets>
d ea lloca tin g <Laptop 3: $51 >
d e a llo ca tin g <Laptop 5: $85 >
G iving up ownership o f array
d e a llo ca tin g <Employee 0: $0 in assets>
d e a llo ca tin g <Employee 1: $153 in assets>
d e a llo ca tin g <Laptop 9: $153 >
d e a llo ca tin g <Employee 9: $136 in assets>
d e a llo cin g <Laptop 8: $136 >
Employee 5
, . , . (
: , N SString,
, .)
employees n i l, ., ,
, Employee
.
, ? , .
- , , .
,
. iOS
. Mac OS X
,
.
S tockH olding , g ?
, P o r t f o l i o ( )^
StockHolding .
P o r t f o l i o .
I . ,
,
. .
. 20.1.
holder
_______ Asset_______ tabel &
_.
Employee
employees
heightlnMeters = 1.8
weightInKilos = 96
employeeID = 0
Asset
~~*
assets
(void)addAssetsObject:(Asset *)a;
- (unsigned int)valueOfAssets;
P*
resateValue = 51_______
label
NSString
@Taptop T
resaleValue = 119
holder
Employee
heightlnMeters = 1.7
weightInKilos = 98
employeeID = 1
NSString
"Laptop3*
Asset
assets
resateValue = 34
tebet r
NSString
"Laptop 2"
- (void)addAssetsObject:(Asset *)a;
- (unsigned int)valueOfAssets;
holder
. 20.1.
( A s s e t) ( Employee).
Asset.h
:
146
20
#import <Foundation/Foundation.h>
#class Employee;
Asset.m descriptio n , :
#import "Asset.h"
#import "Employee.h"
_,
h-&&k
@implementation Asset
@synthesize la b e l, resaleValue, holder;
- (NSString *)description
{
/ / n il?
i f ( [ s e lf holder]) {
return [NSString stringWithFormat:#"<%0: $%d, assignedtoX0>
[s e lf la b e l], [s e lf resaleValue], [s e lf holder]];
> else {
I \ . * M i , L . [
return [NSString stringWithFormat:$"<%$:$%d unassigned>"
[s e lf la b e l], [s e lf resaleValue]];
>
u ^
i I
. . . ___ _________________ ta
(v o id )d e a llo c
_______ _ 9_.N
% ,'
C
{
N S L o g (@ "d eallo cin g %@", s e l f ) ;
>
>
@end
'4
^
: Asse* ^
Em ployee ? , 1 ^
. &
, . |
^
147
:
[vicePresident addAssetsObject:townCar];
, ,
:
- (void)setHolder:(Employee *)e
holder = e;
[e addAssetsObject:self];
}
.
, ,
.
.
Employee.m a d d A s s e ts O b je c t:,
h o ld er:
- (void)addAssetsObject:(Asset *)a
// n il?
i f (!assets) {
//
assets = [[NSMutableArray a llo c ] i n i t ] j
'''* * &
}
[assets addObject:a];
[a se tH o ld e r:se lf];
( : . : addAssetsObject:
setH older: , addA ssetsO bject: ,
setHolder:, ...)
. *
Employees: (
"<Employee
"<Employee
"<Employee
"<Employee
"<Employee
"<Employee
0:
1:
2:
3:
4:
5:
$0 in assets>",
$153 in assets>",
$119 in assets>",
$68 in assets>",
$0 in assets>",
$136 in assets>",
148
20
"<Employee 8: $0 ln assets>",
"<Employee 9: $136 in assets>"
Giving up ownership o f
deallocating <Employee
deallocating <Employee
deallocating <Employee
array
0: $0 in assets>
4: $0 in assets>
8: $0 in assets>
: , i
, . . ?
,
,
.
, . .
- Apple, Instruments.
,
.
, .
, main() sleep()
:
.}
}
sleep (100 );
return 0;
^
Choon T W i TtmpiiH or f*f*tinq
Mftt 01X
M
*mc*Y
1|Syttcm
Pfhj\rlOf
fltanfc
X Uw
i
Ope**
Rtc*nt
ActivHy
Momtof
Tlm* N M v
Mvtaco*t
Leaks
MfMur*t flerwwl mrmorv uwg#. ctocks for <eaked mtnwy. and provMti iw<iBo oft
obJffct attocarion* by class w*ll u meroory n M w i hluorle* for *t' rwe ettaeMfo*it and
<eaked Mock*.
. 20.2.
Instruments
tnstrument Deiail
fW^^^^^^^^^
Attocaik>ns
v Hwp*boji*>^>ri
**
:1VOfc*mO*Mrf
*CfMKdftSB0ijRM9
*i D>sirwt*
? <
5**
'fepmNt*vtwt*d
&JMR4HflW
HUt MtaM^ Sy*flbcH
HMtiy4w>Uterirt
ftw0^-Orty
HOW
ftKU>W
Oft
i *
*
QP
00^^^^^^^
'
9&&&&1&^^CPftftW
WjfiffiflKjifrft6jy1
#Uving * Transftory
524
10
11
7
8
I
I
2
21
6
1
8
113
50
39
97
27
13
36
s
10
s
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Overaii Bytes
114.72K8
336
656
224
288
144
64
360
1.06K8
560
64
272
1.77
l-56KB
1.83K8
6.06
2 11
1.42
4-S0
720
l.S6
880
416
20.3. Allocations
7
*m
1
&t
Z|
21
l i
8
113
S0
39
__________
97
27
13
36
59
10
sa
21
149
150
20
Instrum ents
& )
ao oo 3BQ I Sa'U^-'
8I I . ' .. I Ittomt
jI
pfvf I
/
W
* -
iMfcs
[
MiMfei
[tfA*aw<US4f
hapMMMiM MJ
tan Ml
le0*to#**y
r>
ffi
t S Cydes $ LeokCydes
it! # Cyc*t _
'^
0 *tPptow - 5 nodes
1 fa ploH - 4 nodes
2 EmtHoyre - S nodes
3 twplw i - S nodes
4 *fm p to yM - 4 nodes
5 fmptoyw - 4 nodes
OeSaSls
Cyck Graph
Compfcx Cydi
SimpieCydc
Compf#x Cycle
CompfexCyde
5*mp(e Cycle
SimpteCyde
p i ^
& 1
M TfiXi
. 20.4. Leaks
tim
port
fim
por1
ftim
porl
int :
?
. ,
.
. Asset.h,
:
#import <Foundation/Foundation.h>
#class Employee;
#interface Asset : NSObject
>
NSString *label;
_weak E&ployee *holder;
unsigned in t resaleValue;
iai
151
end
. ,
.
/^
: ,
.
,
. ,
, .
.
main.m:
#import <Foundation/Foundation.h>
#import "Employee.h"
#import "Asset.h"
int main(int argc, const char * a r g v [ ] )
{
@ autoreleasepool {
''
// Employee
&
152
20
/ / 10 A sset
f o r ( i n t i = 0; i < 10; i++) {
/ / A sset
A sset * a s s e t = [[A s s e t a l l o c ] i n i t ] ;
/ /
N SString * c u rre n tL a b e l = [N S S tring
strin g W ith F o rra a t: @"Laptop % d " , i ] ;
[ a s s e t s e tL a b e l: c u r r e n tL a b e l] ;
f a s s e t s e tR e s a le V a lu e :i * 17];
/ / 0 9
NSUInteger randomIndex = random () % [em ployees count];
/ /
Employee *randomEmployee = [em ployees
o b je c tA tI n d e x : random Index];
/ /
[ randomEmployee a d d A s s e ts O b je c t: a s s e t ] ;
[ a l l A s s e t s a d d O b je c t: a s s e t ] ;
>
a l l A s s e t s * n il;
e ^ ) lo y e e s n i l ;
s le e p (1 0 0 );
>
return 0;
'f^fc*^3^
, ^
. allAssets ~* _^
E m p lo y ee 5. *
: ARC
153
0 ? ( E m ployee
5 ), - a l l A s s e t s ,
^ .
h o l d e r ,
Employee 5 ? ,
, , n i 1.
E m p lo y ee 5 ,
h o l d e r .
:
Employees: (
"<Employee 0 : $0 i n a s s e t s > " ,
"<Employee 9: $136 i n a s s e t s > " <ri
)
Giving up o w n ersh ip
d e a llo c a tin g
a llA s s e ts : (
"<Laptop
"<Laptop
"<Laptop
"<Laptop
"<Laptop
"<Laptop
"<Laptop
"<Laptop
"<Laptop
"<Laptop
o f one em ployee
<Employee 5: $136 i n a s s e t s >
0:
1:
2:
3:
4:
5:
6:
7:
8:
9:
G iving up o w n ersh ip o f a r r a y s
d e a llo c in g <Laptop 3: $51 u n a s s ig n e d >
d e a llo c in g <Laptop 8 : $136 u n a s s ig n e d >
:
ARC
19, Objective-C
ARC (Automatic Reference Counting)
,
,
.
154
20
[anObject re le a se ]; / / anObject
[anObject re ta in ]; / / anObject
(retaih
, release ' ^
dealloc ( ) f
setHolder: ^accaAsset :
- (void)setHolder:(Employee *)newEmp
{
[newEmp re ta in ]j
[holder re le a s e ];
holder = newEmp;
'
- -* * * *
dealloc:
- (v oid)dealloc
{
' - ;
[la b e l re le a s e ];
[holder re le a s e ];
[super d e a llo c ];
description? .
Asset ? , -
. autorelease, release . ARC
description Asset :
- (NSString * )d escrip tio n
{
release? autorelease:
/ / autorelease
NSAUtoreleasePool *arp = [[NSAutoreleasePool a llo c ] i n i t ] ;
Asset *asset = [[Asset allo c] i n i t ] ;
v
/ /
a u to re le a s e
r e le a s e
155
ARC a u to r e le a s e ,
. ARC
autorelease.
:
/ / autorelease
^autoreleasepool {
Asset *asset = [[Asset a llo c ] i n i t ] ;
NSString *d = [asset description];
/ / , d, autorelease
} / /
,
Objective-C. ARC,
.
,
. :
, ,
. , ,
, , ,
.
, ( ).
, a llo c
new , . (
, 1
autorelease.) ,
. ,
: a llo c (
in it) , mutableCopy.
,
. ( , 1
a u to re le a s e ,
,
autorelease.)
156
20
, , /,
, , retairu,4
).
I ,
release autorelease. ( release *
, autorelease coo6n^
release .)
I ,
( , .
dealloc.)
,
. A sset
, .
, Asset ,
, .
, | :
. .
, ,
.
,
autorelease description :
, .
: NSArray NS
MutableArray. ,
. ,
( ).
,
: NSSet/NSMutableSet N SD ictionary/N SM utableD ictionary.
NSArray/NSMutableArray
'--,^^
.
, .
BMITime ,
employees. ,
:
// Employee
NSMutableArray *employees = [[NSMutableArray alloc] in it ] ;
for (int i * 0; i < 10; i++) {
//
Employee *person = [[Employee alloc] in it ] ;
// employees
[employees addObject:person];
>
[employees removeObjectAtIndex:5];
employees = n il;
158
21
, (mutable)
l o c / i n it . , $
:
''^
NSMutableArray *employees = [NSMutableArray a r r a y ] ;
addO bject : .
, ^ ^ ^
.
NSArray ,
. :
NSArray *colors = [NSArray arrayWithObjects:@"Orange", @"Yellow",
@Green", n il] ;
n il , . colors
. ( nil, , }'
.)
NSArray. , ?
:
, . ,
, . ,
NSMutableArray,
NSArray. , :
/ / 30
- (NSArray *)odds
>
return odds;
}
, , ,
NSArray.
,
NSMutableArray.
; .
,
,
. .
, N SM utableA rray
, NSArray
.
Objective-C. Foundation
: NSA rray, N S S trin g , N S A ttrib u te d S trin g , NS
Data, N S C haracterS et, N S D ic tio n a ry , NSSet, N SIndexSet NSURLRequest.
: NSM utableArray, NSM utableString,
N S M u tab leA ttrib u ted S trin g . . NSDate NSNumber
, .
,
.
NSMutableArray :
- (void)sortUsingOescriptors:(NSArray *)sortDescriptors;
N S S ortD escriptor.
, ,
( ).
? , I .
I ? I , :
I ;
I , , I & .
160
21
NSSortf>Mcrfptor
key * ^HastName*
ascending * YES
S'
Iz
NSSor1De*crlptor
key as @^rstName'
ascending = YES
NSSortDMCriptor
key = @HzipCode*
ascending = YES
21.1. lastName,
firstName zipCode
, ,
.
BMITime ,
. m ain(), employees
valueO fA ssets. ,
em p lo yeeID . main.m\
}
'V * 7 # ^ H H
%
NSSortDescriptor *voa =
[N S S o rtD escrip to r sortDescriptorWithKey:0"valueOfAssets"
ascending:YES];
N S S o rtD escrip to r * e i =
[NSSortDescriptor sortDescriptorWithKey:0"employeeID"
ascending:YES];
[employees sortUsingDescriptors:[NSArray arrayWithObjects:voa,
e ij n i l ] ] ;
^ ? |^ ^ ^ ^
NSLog(0"Employees: %@", employees);
. ,
:
E m ployees: (
161
N SPredicate ,
, : employeeID 75.
NSMutableArray ,
:
- (void)filterU singP redicate:(N SP redicate *)predicate;
NSArray , ,
:
- (NSArray * )filtered A rrayU sin gP red icate:(N S P red icate *)predicate;
, , ,
$70.
main.m :
[employees removeObjectAtIndex:5];
NSLog(@"allAssets: %@", a llA s s e t s ) ;
NSPredicate *predicate = [NSPredicate predicateMithFormat:
@ "holder.valueO fAssets > 70"];
NSArray *toBeReclaimed =
[ a llA s s e ts filte re d A rra y U s in g
P re d ic a te :p re d ic a te ];
NSLog(0"toBeReclaimed: %@", toBeReclaimed);
toBeReclaimed = n i l ;
NSLog(@"Giving up ownership o f a rra y s " );
a llA sse ts = n i l ;
employees = n i l ;
>
>
*p*
return 0;
- i ||
.
:
toBeReclaimed: (
"<Laptop 1: $17, assigned to <Employee 6: $119 in assets>>",
"<Laptop 3: $51, assigned to <Employee 5: $136 in assets>>",
"<Laptop 5: $85, assigned to <Employee 5: $136 in assets>>",
"<Laptop 6: $102, assigned to <Employee 6: $119 in assets>>",
"<Laptop 8: $136, assigned to <Employee 9: $136 in assets>>",
"<Laptop 9: $153, assigned to <Employee 1: $153 in assets>>
21
162
,|
Predicate Programming Guide* ^
NSSet/NSMutableSet
" I
,
.
.
, , : ? ,
URL-, .
- , ,
URL- .
.
.
, NSMutableArray
NSMutableSet.
holder
__________ Employee
heightInMeters = 1.8
welghtlnKllos = 96
emptoyeelD 0
assets
I ' holder
Employee
heightInMeters 1 .7
weightInKilos = 98
emptoyeelD = 1
(vold)addAsaetsObject:(As3et *)a;
- (unsigned lnt>valuaOIABsats;
resaleValue = 34
N89trtQ8
Laptop ?
holder
. 21.2. NSMutableSet
Employee.h :
#import "Person.h"
@ class A sset;
NSSet/NSMutableSet
153
^ in te r f a c e Employee : Person
i n t employeeID;
NSMutableSet * a s s e t s ;
>
0property I n t employeeID;
- (v o id )a d d A s s e ts O b je c t:(A s s e t * )a ;
- (unsigned i n t ) v a lu e O f A s s e ts ;
0end
Employee.m :
- (v o id )a d d A s s e ts O b je c t:(A s s e t *)a
{
i f (!a sse ts) {
a s s e t s = [[NSMutableSet a l l o c ] i n i t ] ;
}
[ a s s e t s a d d O b je c t:a ] ;
[a s e t H o l d e r : s e l f ] ;
>
. ., S J ,m '
. ,
.
,
. :
? NSSet :
- (B O O L )containsO bject:(id)x;
, x. ,
YES; N0.
:
? NSObject is E q u a l:,
:
i f ([myDoctor is E q u a l:y o u rT e n n is P a rtn e r]) {
NSLog(@"my d o cto r i s eq u al to your te n n is p a r tn e r " ) ;
}
.''^^^f^*
NSObject is E q u a l:. :
- (B O O L )isE qual:(id)other
{
re tu rn ( s e l f == o th e r ) ;
>
'| | g |
, isE q u a l:
:
164
21
i f (myDoctor * yourTennisPartner) {
NSLog(@my doctor is equal to your tennis p artn er");
>
'
isEqual:. , N S S t r i n g
isEqual: . *
. , 8
:
NSString *x = . . .
NSString *y = . . .
x , .
x , , ,
, .
, ,
.
? , . , NSM utableArray
:
- (NSUInteger)indexOfObject:(id)anObject;
- (NSUInteger)indexOfObjectIdenticalTo:(id)anObjectj
,
isEqual: anObject.
== anObject.
NSDictionary/NSMutableDictionary
,
; :
10. ( ) ;
:
fa v o rite C o lo r> . ,
/. ,
. / -
.
.
Employee.
@"" ( ), 0'*CTO
( ). main.m\
N SM utableD ictionary, <*4
NSDictlonary/NSMutableDlctionary
165
. , n i l , ,
.
// Employee
NSMutableArray *employees = [[NSMutableArray a llo c ] i n i t ] ;
// executives
NSMutableDictionary *executives =
[[NSMutableDictionary a llo c ] i n i t ] ;
for (in t i = 0; i < 10; i++) {
// Employee
Employee *person = [[Employee a llo c ] i n i t ] ;
//
[person setW eightInK ilos:90 + i ] ;
[person setH eightInM eters:1.8 - i/ 1 0 .0 ] ;
[person setEm ployeeID :i];
// Employee employees
[employees addO bject:person];
// ?
i f ( i == 0) {
[executives s e tO b je ct:p e rso n fo rK ey:0 "C E O "];
>
// ?
i f ( i 1) {
[executives se tO b je c t:p e rso n fo rK e y :g "C T O "]j
>
}
166
21
n il;
n il;
}
re tu r n 0;
>
. :
e x e c u tiv e s = {
CEO = "<Employee 0: $0 in a s s e ts > " ;
CTO = "<Employee 1: $153 in a s s e ts > " ;
>
holder
_______ Asset
lebel
resaleValue = 51______
executives
Employee
heightInMeters = 1 8
weightfnKik>s = 96
empioyee!D = 0
(void)addAssetsObject:(Asset ')a;
- (unsigned int)vatueOfAssets;
assets
NSString
0"Laptop3"
aHAssfls
Asset
fabei ^ NSString
resaleValue = 119_____
HLaptop7*
Employee
heightInMeters = 1.7
weighilnKik>s = 98
empioyeetD = 1
- (void)addAssetsObjecL(Asset *)a;
(unsigned irrt)valueOfAssets;____
holder
.
/.
/ /
N SM utableD ictionary * frie n d s = [N SM utableD ictionary d ic tio n a r y ] ;
/ / "b e stF rie n d "
[ f r ie n d s s e tO b je c t:b e tty forK ey:@ "bestF riend"];
/ /
[ f r ie n d s s e tO b je c t:ja n e forK ey:@ "bestF riend"];
|
/ / frie n d s "/" (b estF rien d => j ane'
, ,
f l o a t , in t
167
.
, . NSNumber
, a NSValue .
, 4 5,6
NSNumber:
NSMutableArray *numList = [ [NSMutableArray a llo c ] i n i t ] ;
[numList addObject:[NSNumber numberWithInt:4]];
[numList addObject:[NSNumber num berW ithFloat:5.6]];
nil
, , n i l.
, ?
NSNull.
, . :
NSMutableArray *hotel = [[NSM utableArray a llo c ]
in it ] ;
//
[hotel addO bject:lobby];
// ,
[hotel ad d O b ject:p o ol];
//
[hotel addO bject:[N SN ull n u l l ] ] ;
//
[hotel addObject:bedroom s];
, ,
, .
, (,
, n). .
Objective-C :
# d e fin e .
Xcode Foundation
C onstants.
#define.
math.h. , M_PI.
main.m\
#import <Foundation/Foundation.h>
i n t main ( i n t argc, const char * a rg v [])
{
@autoreleasepool {
/ / NSString
// \u
NSLog(0"\u03c0 is %f", M_PI);
>
retu rn 0;
>
* t^
^H
-/m ^ ^ M
. :
niath,h:
\ . 1 4 aS 9 2 6 R3 5 fl0 7 9 3 2 3 8 4 6 a 6 4 ia B 3a 7 9 S0 2 gB
,,i
#include #import :
(<
,);
.
#intludi WimportV #import tapaniitpyet,
pa i, ttlnc iudfi noinoanti
I! #include,
anpofpaMMH< iM ()bjg( tive ( ' Blmport
01 6f?I1
(:tu/)KH , 1
cKia !, i
, np<4ipoijeec<>py. (, - n m i h h Kai / e / / )^v0lopeT/Sl)Ks/MtU ().SX 10 7s<lh/usi/tii(lit<lr t mt i hh)
| | Wlmport
/ / Hvn*rninnt- @@@8/ H**t f t0 P g
#iwpert "P#fcitere#ft"
/ / b ttw s* v\ @ 0 OpfefiM>AH
#i*p0f4 <l4ap,H>
170
22
, Xeod#
, ^ ^
. Constants &^
'oTisf(ints-f*rr/i\\j)ch.
, mnth.h
main.m? 1laiu . moin.m :
#import <Foundation/Foundation.h>
Foundation.h :
# in clu d e <CoreFoundation/CoreFoundation. h>
CoirFoundation.h :
#include <math.h>
#define
#define : , * X, V , .
math.h:
# d efin e M_PI
3.14159265358979323846264338327950288
#define ( )
.
, #define
. main.m :
#im port <Foundation/Foundation.h>
i n t main ( i n t arg c, co n st char * argv[])
{
0 a u to re le a se p o o l {
'; i | ^ ^ K U
.:v4^---j
re tu rn 0;
>
, a # d efin e. 1 |
# d efin e MAX(A,B)
^^
, ,
:
/vf oH*
,
i7 i
# d e fin e (
), , .
#define Objective-C
.
. NSLocale , ,
. ,
,
. , ,
, :
#import < F oun dation/F oundation. h>
in t main ( i n t a r g c , c o n s t c h a r * a r g v [ ] )
{
@ autoreleasepool {
NSLog(@"\u03c0 is %f", M_PI);
NSLog(@"%d is la rg e r", MAX(10, 12));
NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:0"currency"];
NSLog(@"Money is %@", currency);
>
re tu rn 0;
>
,' V * * -
. , ,
:
Money is USD
(, @"Kuruncy"),
.
Foundation NSLocaleCurrencyCode. ,
, . ,
172
22
Xcode ,
@ "". , * ^^
#im port < F oundation/F oundation.h>
i n t main ( i n t a rg c , c o n st ch ar * argv[])
@ autoreleasepool {
NSLog(@"\u03c0 i s %f", M_PI)j
NSLog(@"%d i s l a r g e r " , MAX(10, 1 2 ) ) ;
. *
;- ^
- , . !?;^ | ^ |
>
re tu rn 0;
-^ > ^ ^ ^ B H
'-'^ :
NSLocale
. NSLocale.h :
e x te rn N SString co n st *NSLocaleCurrencyCode;
const ,
. extern
: , , .
, NSLocale.m :
NSString co n st *NSLocaleCurrencyCode = @ "currency";
enum
v.'*
. ,
. Blender
setSpeed: . , , *
.
, '.
enum BlenderSpeed {
B lenderS peedS tir = 1,
BlenderSpeedChop = 2,
B lenderSpeedLiquify = 5,
enum
173
BlenderSpeedIceCrush = 15
};
/ / setSpeed:
- (void)setSpeed:(enum BlenderSpeed)x;
0end
enum B l e n d
e rS p e e d .
ty p e d e f:
typedef enu*
BlenderSpeedStir = 1,
BlenderSpeedChop = 2,
BlenderSpeedtiquify = 5,
BlenderSpeedPulse = 9,
BlenderSpeedIceCrush = 15
} BlenderSpeed;
gL nterface B lender : NSObject
{
, /
BlenderSpeed sp eed ;
*-*
.,y ^ m m
>
// setSpeed: *
I (voi6)setSpeed:(B IenderSpeed)x;
gend
,
6 .
*** ,
**:
typedef {
81ef>derSpeedStir,
BUoderSpeedChop,
51enderSpeedLdLquify,
- lenderSpee<JPu l s e ,
SlenoerSpeedIceC rush
) ile n d e rS p e e d ;
174
22
#define
#define,
( enum), Objective-C ?
. ,
== isE q u a l: (
). ,
.
enum, #define.
NSString NSData
Foundation
. .
NSString
NSString.
,
. ASCII 'A'
01000001, UTF-16 'A '
0000000001000001.
Foundation 20 .
UTF
. : UTF-16
, UTF-8 128 ASCII
, .
UTF-8 .
: Foundation
Stringz. m ain() N S S trin g
:
#import <Foundation/Foundation.h>
int main (in t argc, const char * arg v [])
xP^
176
23 NSString NSData
0autoreleasepool {
NSMutableString * s t r * [[NSMutableString a llo c] in it ] ;
fo r ( in t i * 0; i < 10; i++) {
[s tr appendString:Aaron is c o o l!\n ''];
>
>
re tu rn 0;
>
,
. /tm p /c o o l.tx t .
;
/ , ,
.
/ . Objective-C
,
. ( /tmp Finder,
Go Go to Folder.)
NSError
.
, ,
. .
. , *
, -
.
9, -
, *
. ( ) > *
o n e p a iU |
. 10
NSError. P*
:
I
1
NSError
177
>
// NSError
// . NSError
// .
NSError * e rro r = n i l ;
//
NSError NSString
BOOL success = [ s t r w riteT o F ile:g "/tm p /c o o l.tx t"
atomically:YES
encoding:NSUTF8StringEncoding
e rro r:& e rro r];
//
/ / NSError
i f (success) {
NSLog(0"done w ritin g /tm p /c o o l.tx t" );
} else {
N SLog(fw riting / t* p / c o o l.tx t f a ile d : %",
[e rro r lo c a liz e d D e sc rip tio n ]);
^,^*
>
>
return 0;
>
>-']-\ |
. ,
, @"/
too/darned/bad. txt".
.
: NSErw , NSError, .
? , .
, w rite T o F ile : atom ically : encoding: erro r:
* NSError
error. .
error .
178
23 NSStrlng NSData
.
NSError.
, NSError , ,
, . ,
N0. NSError,
; NSError
, .
NSString
:
#import <Foundation/Foundation.h>
in t main ( in t argc, const char * argv[])
@autoreleasepool {
NSError * e r r o r = n i l ;
NSString * s t r = [ [N SString a llo c J
in itW ith C o n te n ts O fF ile :0 " /e tc /re s o lv . conf"
encoding : NSASCIIStringEncoding
error:& error];
NSData
if
(!str)
17
>
>
return 0;
>
NSData
NSData . ,
URL- NSData,
. Foundation
ImageFetch;
Google NSData. NSData
:
#import <Foundation/Foundation. h>
int main (int argc, const char * a rg v[])
,^ :^ H
0autoreleasepool {
NSURL *url = [NSURL URLWithString:
0"http://www.google. com/images/logos/ps_logo2. png" ];
NSURLRequest *request = [NSURLRequest requestM ithU R L:url];
NSError *error = n i l ;
NSData *data * [NSURLConnection sendSynchronousRequest:request
returningResponse:NULL
e r r o r :& e r r o r ] ;
if(!data){
NSLog(f"fetch f a ile d : X j [ e r r o r lo c a liz e d D e s c rip tio n ] ) ;
return 1;
>
NSLog(fThe f i l e i s Xlu b y te s ", [data le n g th ]) ;
BOOL written [data w riteToFile:# "/tm p/google.png"
o p tio n s:0
e r r o r :& e r ro r ] ;
&
180
23 NSString NSData
i f ( lw r it t e n ) {
NSLog(@"write f a ile d : %0", [ localizedDescription]).
re tu rn 1;
>
NSLog(0"Successl");
>
re tu r n 0;
>
.
Preview.
w r i t e T o F i l e : o p t i o n s : e r r o r : , . NSDataWritingAtomic. , ,
.
. .
, , ,
. :
NSLog(@"The f i l e i s %lu b y te s " , [d a ta le n g t h ] ) ;
BOOL w ritte n = [data w riteToFile:@ "/tm p/google.png"
o p tio n s : NSDataWritingAtomic
e r ro r :& e r r o r ] j
i f (!w r itte n ) {
NSLog(@"write f a i l e d : %@", [ e r r o r lo calized D escrip tio n ]);
re tu rn 1;
>
,
.
, .
NSData
NSData .
:
#import <Foundation/Foundation.h>
in t main (in t argc, const char * argv[])
NSData
i8 i
g au toreleasep oo l {
NSURL * u rl = [NSURL URLW ithString:
@" h t t p : / /www. g o o g le . com/ im ages/ logos/ps_logo2. png" ];
NSURLRequest * re q u e s t = [NSURLRequest requestWithURL:url];
NSError * e rro r;
// ,
>
rtturn 0 :
>
<*. .
^0l^b. ^0^
\^^
^SSiBm
^^^^^^^
.
Foundat ion (, NSString NSArray)
.
.
,
, , . .
,
, , ,
. Mac OS iOS
NSRunLoop. , *
.
, , *
. Objective-C J
. ( ' j
X*,
.)
/: .* <1"J
X,
^.
, , . <(
.
<3a^ I
:
^I
, ,
- , . ( I! "0^ ^ I
25.)
I
.
4TPwgj>-L*%^Y^^^-
'^ ^ -^ - ^
-, , -----
: * -^* * * ^
X, onoMr*Ki
.
* i n * J
,
/
, /* n
, . 1!< nrtt^nm
m
,
Xcode : Foundation
Callbacks.
. main.m:
#import < F o u n d a tio n /F o u n d a tio n .h >
in t main ( i n t a r g c , c o n s t c h a r * a r g v [ ] )
{
@ a u to rele ase p o o l {
[[NSRunLoop currentR unL oop] r u n ];
>
r e tu r n 0 ;
i
184
24
. : run
. , ,
- . ,
( Product Stop.)
,
. : Objective-C Logger
NSObject. (
File New New File...) Logger.h :
#import <Foundation/Foundation.h>
$in terface logger : NSObject
- (void)sayOuch:(NSTimer * ) t ;
0 end
,
. .
Logger.m sayOuch::
#import "Logger.h"
^implementation Logger
~ (void)sayOuch:(NSTimer * ) t
{
NSLog(0"Ouch!");
>
9
end
ciasa taw~~
foo?
foo? [
,'''~~ *
\ {
'\ \
fr**o"
__ I
1ini wofahUnKilo
jlloat he^htlnMewre____J
j-~(Houl)bodyMaeslndexJ
\ CtWP*-rM
e ."' ^^f"
^ 4qfeo?.
tmpioyM
Utoo]
C
T *F =
wetylnlnKtom M
1.1
omptoywtDmII
i
Employe*
Int employeeID
. 24.2.
185
.
, ,
.
, - : ,
.
, , .
(
) .
.
.
1923912?
^ -
NSObject
<
/'
^ , int welghtlnKllo
j float heightInMeters
he&
J
(fioat)bodyMassTndex ]
>- (floaty
'V
4 *****?
Employee
[*foo]
[1&2...........
3912?
Pq:
is a =
..........
weightInKilos = 96
hefehtlnMeters * 1.{
employeelD = 15
Employee
* int emptoyeelD
. 24.3.
, ,
&. , sayOuch: Logger, .
0selector.
main.m Logger
NSTimer. sayOuch:.
#import <Foundation/Foundation.h>
#import "Logger.h"
int main ( in t argc, const char * argv[])
#autoreleasepool {
186
24
Logger *logger = [[Logger a llo c ] i n i t ] j
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval*2a
target:logger
s e le c to r :0selector(sayOuch:)
u serIn fo :n il
repeats:YES];
[[NSRunLoop currentRunLoop] run];
>
return 0;
>
. ( , .)
Ouch! .
: .
0selector(sayO uch) 3KBHBaneHTHa0selector(sayOuch:).
.
: timer, .
(, )
,
. __ unused.
.
__unused NSTimer * tim e r = [N S T im e r s c h e d u le d T im e r W ith T im e In te r v a l:2 .0
ta rg e t:lo g g e r
s e le c to r :@ s e le c to r ( s a y O u c h :)
u s e rIn fo :n il
r e p e a t s :YES];
. .
W0 *
. : ^ ^
. / . w >
( , | ^
/ . -
?
^
23 N SU R LC onnection * * :
-. , *^
187
> .
,
.
,
, - .
N SU R L C onnection .
, ,
, -
.
? NSURLConnection
. - ,
. ?
NSURLConnection ( ),
.
:
- (NSURLRequest * )c o n n e c tio n :(N S U R L C o n n e c tio n * )c
w illS e n d R e q u e st:(N S U R L R e q u e st * ) r e q
re d ire c tR e s p o n s e :(N S U R L R e s p o n s e * ) r e s ;
- (v o id )c o n n e c tio n :(N S U R L C o n n e c tio n * ) s e n d e r
d i d R e c e iv e A u th e n tic a ti o n C h a l le n g e : (NSURLAuthentication
C h a lle n g e * ) c h ;
! *m,;Hj
- (v o id )c o n n e c tio n :(N S U R L C o n n e c tio n * ) s e n d e r
d id R e c e iv e D a ta :(N S D a ta * ) d a t a ;
- (v o id )c o n n e c tio n D id F in ish L o a d in g :(N S U R L C o n n e c tio n * )sen d e rj
(v o id )c o n n ec tio n :(N S U R L C o n n ectio n * ) s e n d e r d id F ailW ith
E rr o r :(N S E rr o r * ) e r r o r ;
* (NSCachedURLResponse * )co n n ectio n :(N S U R L C o n n ectio n *)sender
w illC a c h e R e sp o n se : (NSCachedURLResponse *)cachedResponse;
, N S U R L C o n n e c tio n ,
NSTimer. ,
, N SU R LC onnection .
,> N SU R LC onnection ,
delegate.
188
24
<Foundation/Foundation. h>
#import "Logger.h"
#im port
@ autoreleasepool {
, i ''j * ^ E L J
NSTimer *tim e r
= [NSTimer scheduledT im erW ithT im eInterval:2.0
ta rg e t:lo g g e r
s e le c to r:0 s e le c to r(s a y O u c h :)
userI n f o : n i l
repeats:YES];
189
return 0;
>
L o g g er N SM utableD ata
.
Loggerk
| I ; _.g |
#import < F o u n d atio n /F o u n d atio n . h>
0 interface Logger : NSObject {
NSMutableData *incomingData;
}
- (void)sayOuch:(NSTimer * ) t ;
0end
L ogger.m :
#import "Logger.h"
^implementation Logger
- (void)sayOuch:(NSTimer * ) t
{
NSLog(@"Ouch!");
}
/ /
- (void)connection:(NSURLConnection *)connection
d id R eceiv eD ata:(N S D ata * ) d a t a
//
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(0"Got i t a l l !");
>
NSString *string n [[NSString a llo c ] initWithData:incomingData
encoding:NSUTF8StringEncoding];
incomingData * n il;
NSLog(f"string has %lu ch aracters" , [ s tr in g le n g th ]);
/ / ,
/ / NSLog(0"The whole str in g i s %", s t r in g );
)
190
24
/ /
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
NSLog(0"connection fa ile d : %@", [error localizedDescription])*
incomingData = n il;
>
0end
: ,
.
. ,
- . .
, : Apple
/.
Apple . (
.) .
?
Mac ,
. NSSys
t e m T im e Z o n e D id C h a n g e N o tif ic a tio n , >
.
main.m, Logge^
:
@au to r e le a sepoo1 {
Logger * lo g g er - [[L ogger a l l o c ] i n i t ] ;
[ [N S N o tific a tio n C e n te r d e f a u ltC e n te r ]
191
addO bserver:logger
s e le c to r :0selector(zoneChange:)
name: NSSystemT imeZoneDidChangeNotification
o b je c t:n ll];
NSURL *url = [NSURL URLWithString:
@"http f //www. g u ten b erg I org/cache/epub/205/pg205.txt" ];
NSURLRequest * req u est = [NSURLRequest requestWithURL:url];
* .
* [[NSURLConnection a llo c ]
in itW ith R e q u e s t: req u est
d e le g a te :lo g g e r
startIm m ediately:Y E S ];
_unused NSTimer * tim er
= [NSTimer scheduledTim erW ithTim eInterval:2.0
ta r g e t: l o g g e r
sele c to r:@ se le c to r(say O u ch :)
u s e rIn fo :n il
rep eats:Y E S ]j
'
!
>!
iBOBQM
>
return 0 ;
Logger.m\
- (void)zoneChange:(NSNotification *)note
c6 # H
y
. ,
zoneChange:. (
; .)
0?
B:,
" .
Apple >
' ?
192
24
, - ( NSTimer),
/ .
4
^l
( NSURLConnectio i *?
. I *
.
,
( , NSTimeZone), .
, ,
, ,
- , :
.
,
dealloc:
- (void )d ealloc
[[NSNotificationCenter defaultCenter]
r e m o v e O b s e r v e r :s e lf];
>
.
, ,
dealloc:
- (void)dealloc
{
[windowThatBossesM eAround s e t D e le g a t e : n i l ] j
[ta b le V ie w T h a tB e g s F o rD a ta s e tD a ta S o u r c e : n i l ] ;
>
. , ^
,
d ealloc:
- (void)dealloc
{
[buttonThatKeepsSendingM eM essages s e t T a r g e t : n i l ] ;
>
193
, Logger
. ( ,
: NSURLConnection
, a NSTimer .)
, .
- : , , , .
:
. ,
N S M utableA rray,
.
,
.
- .
, . |
? i
@ p ro to co l.
UITableView
..... ' --**'" ~ ~ ~ . - - . i - ~ ^ ~ ~ ~ ^ ~ -
Joe Conway
Mark Fenoglio
Brian Hardy
d a ta S o u rce
TerrlficVlawControtle^.
---------------- -----------------------------
* H
k MH l A
fW Mt
r ni lW
U M*
Scott nttehto
A le x
S H v en rm n
. 25.1. UITableView
195
, i O S
UITableView. UITableView ,
; .
: ,
.
, UIT ableView,
UITableV iew ? .
, .
,
.
UITableView UITableViewDataSource ( ):
/ / > > .
/ / NSObject
@protocol U IT ableV iew D ataSource <NSObject>
/ /
/ /
0required
/ / ,
/ /
- (N S In teger)tab leV iew :(U IT ab leV iew * ) t v numberOfRowsIn
S e c t i o n : (N S I n te g e r )s e c tio n ;
^ :/ '^ .^ ^ ^ . ;> ^ -
/ / ( ;
- (UITableViewCell *)tab leV iew :(U IT ab leV iew * )tv
cellForR ow A tIndexPath:(N SIndexPath * )ip ;
/ / ( )
/ /
@optional
/ / ,
/ /
(NSInteger)numberOfSectionsInTableView:(UITableView *)tv;
/ /
(BOOL)tableView:(UITableView * ) t v
(NSIndexPath * )ip ;
(BOOL)tableView:(UITableView * ) t v
(NSIndexPath * )ip ;
^ (void)tableView:(UITableView * )tv
c a n E d itR o w A tIn d e x P a th :
c a n M o v e R o w A tIn d e x P a th :
^6^
196
25
, , E
Apple,
.
,
UITableView, :
U IT ableV iew D ataSource.
:
@ in te rfa c e T e r r if ic V ie w C o n tr o lle r
< U IT a b le V ie w D a ta S o u rc e >
: U IV ie w C o n tro lle r
end
, T e r r i f i c V i e w C o n t r o l l e r UIViewController,
U IT ableV iew D ataS ource.
,
:
@ in te r f a c e T e r r i f i c V i e w C o n t r o l l e r : U IV ie w C o n tro lle r
< U I T a b le V ie w D a ta S o u r c e , U I T a b le V ie w D e le g a te , U IT ex tF ield D eleg ate>
TerrificController.m .
, .
*
.
.
: C allb ack s 24 Logg6
NSURLConnection. Logge?-h
, Logger .
NSUR
C o n n e c t i o n . , . (
Callbacks 1*
N S U R L C o n n e c t i o n D e l e g a t e , ,/3*
.)
,* ;
, ,
. ,
. ,
,
. Objec
tive .
:
NSArray
NSDictionary
NSString
NSData
NSDate
NSNumber (, )
,
.
. Xcode
: F o u n d atio n
s to c k z. :
#im port < F o u n d a t io n /F o u n d a t io n .h >
in t m a in ( in t a r g c ,
@ a u to re le a s e p o o l {
198
26
stock = [NSMutableDictionary d ictio n a ry ];
[stock setObject:0"AAPL"
forKey: " symbol"];
[ stock setO b ject: [NSNumber numberWithInt:200]
forKey: Q " shares"];
[stock s addObject:stock];
stock * [NSMutableDictionary d ictio n a ry ];
[stock setObject:0"GOOG"
forKey:"symbol"];
[ stock setO b ject: [NSNumber numberWithInt:160]
forKey:0"shares"];
[stock s addObject:stock];
[stock s w riteT oF ile:0" /tm p /stock s.p list"
atomically:YES];
>
return 0 ;
>
( sto c k .
, .)
. 26.1.
stocks.plist. 0
, :
<? xm l v e r s io n = " 1 . 0 " e n c o d in g = " U T F - 8 "?>
< !DOCTYPE p l i s t PUBLIC
" I / / A p p l e / /D TD P L IS T 1 . 0 / / E N " " h t t p : //w w w .a p p le .c o m /D T O s /
P r o p e r ty L is t-1 .0 .d td " >
199
<integer>200</integer>
<key>symbol</key>
<string>AAPL</string>
< /d ic t>
<dict>
< key>shares</key>
< in te g e r> 1 6 0 < /in te g e r>
<key>symbol</key>
<string>G O O G </string>
< /d ic t>
</array>
< /p lis t>
, ? XML. . .
, ,
Xcode
.
:
in t m ain (in t a rg c , c o n s t ch ar * a r g v [ ] )
{
@ autoreleasepool {
NSMutableArray * sto c k s = [[NSMutableArray alloc] i n i t J ;
N SM utableD ictionary * sto c k ;
stock = [N SM utableD ictionary d ic tio n a ry ];
[sto ck setObject:@"AAPL"
fo rK ey :@"symbol" ];
[sto ck setO bject:[N SN um ber n u m b e r W ith I n t:2 0 0 j
forK ey:@ "shares"J;
[sto c k s a d d O b je c t:sto c k ];
stock = [N SM utableD ictionary d ic tio n a ry ];
[sto ck setObject:0"GOOG"
forK ey: @*symbol" ];
[stock s e tO b je c t: [N SN um ber n u m b e r W ith I n t:1 6 0 ]
forKey:@"shares"];
[stocks a d d O b je c t:sto c k ];
[ stocks w rite T o F ile :@/tm p /s to c k s . p lis t"
atom ically:Y ESJ;
200
26
NSArray * s to c k L is t =
(N SA rray a r r a y W ith C o n te n ts O f F ile :0 " /tm p /s to c k s .p lis t" ] .
f o r (N S D ic tio n a ry *d i n s t o c k L i s t ) {
NSLog(@"I h av e %@ s h a r e s o f %@",
[d o b je c t F o r K e y : 0 " s h a r e s " ] ,
[d o b je c tF o r K e y :0 " s y m b o l" ] ) ;
>
>
return 0 ;
}
.
, 8 ,
, , , , , , ,
.
, ^ ^ ^ * " ^ , m a
iOS Cocoa.
^
o . ^ * ,
(GUI, Graphical User Interface),
? ,
r , *
,
,
, . ^
0,
.
. ; , p
._/1
i O S ,
Cocoa. Cocoa ,
^^^ __ p oUndation. Cocoa
I Mac.
_ , FoundaI Cocoa Touch
I tion.
iOS
iO S :
iT a h D o o d le , .
iT a h D o o d le .
1 | insert )
. 27.1. iTahDoodle
iO S , MHKffi
^
_
. , - ^
,
(, ) ( ,
).
iTahDoodle
I xcode File New N ew Pro}ect.... iOS (
MacOSX!) Application.
Empty Application.
Choose a template for your new project:
I
| ;
Fnmework U brary j
Other
fcM a cO S X
Master~DetaH
A p p lica tio n
O p e n G l Game
*^'
Page~8ased
Application
Sfog!e Vlew
Application
AppHcation
Fraroework & Ubrary
AppT<catton Ptug~in
I ****| i
aa tI
i'; *
V i
i< S J
1*
.* t
1'-b....4
i
*t|
System Plug-In
<M*er
Empty Application
T his tem plate pro vid es a startin g point fo r any application, it provides just an appfication
delegate and a w indow .
Cancel
I Previous !
Nexl - j
. 2 7 .2 . iOS
X c o d e .
, . . X c o d e
, , .
Xcode; ,
,
. 27.2.
. .
,
Big N e rd R a n c h forums.bignerdranch.com.
1^ Next iT ahD oodle. Com pany Identifier Bundle Identifier -
204
27 iOS
App Store.
. , BigNerd Ranch *
Company Identifier com.bignerdranch.
Choose options fo r your new project:
I.i fTahDoodJe
-
--
- -
----------}
--
.........- -...........
com .bignerdranch
com .bjgnerdranchJTahDoodte
O a ss Preftx
Devtce
8NR
Cancel
Previous
. 27.3. iTahDoodle
C l a s s P r e f i x
, . ( .
) , OTl
Apple . ( BNR,
.)
^
Apple. ^
Apple, , NS coKpaw
*NeXTSTEP* (, *1**
-
]
Foundation).
UIKit, UI
, iT a h D o o d le ^
iPhone ( iPad
iT a h D o o d le ,
Core Data .
BNRAppDelegate
205
BNRAppDelegate
Empty A p p licatio n , Xcode
: BNRAppDelegate.
;
iOS. BNRAppDelegate ,
.
BNRAppDelegate.h.
.
,
, ,
.
.
.
#im port < U I K it/U I K it.h >
@ in terface BN R A ppD elegate : U IR e sp o n d e r
< U IA p p lic a tio n D e le g a te >
{
U ITableV iew * t a s k T a b l e ;
U IT e x tF ie ld * t a s k F i e l d ;
U IB utton * i n s e r t B u t t o n ;
N SM utableA rray * t a s k s ;
}
- (v o id )a d d T a s k :(id )s e n d e r;
@property ( s t r o n g , n o n a to m ic ) UIWindow *window;
@end
: UIKit.h. U IK it
iOS, U IT ableV iew , U IT extF ield
I UIButton. , BNRAppDelegate U IA pplicatip n D e le g a te .
, Foundation.h.
NSMutableArray? Foundation
8 ,
Foundation . ( ?
,( iTahf)oodle-I*refix.pch Supporting F iles
.)
206
27 tOS
I/
, ^ 1
iTahDoodle . 1
, . Objective-
,
Objective-C
.
iTahDoodle
XML. , - .
NSString.
,
BNRAppDelegate.h.
# im p o rt < U IK it/U IK it.h >
/ /
/ / ,
/ /
NSString *docPath(void);
@ in te rfa c e BNRAppDelegate : U IR esp o n d er
< U IA p p lic a tio n D e le g a te >
{
U ITableV iew * ta s k T a b le ;
U IT e x tF ie ld * t a s k F i e l d ;
U IB u tto n * in s e r t B u t t o n ;
N SM utableA rray * ta s k s ;
>
- ( v o id ) a d d T a s k :( id ) s e n d e r ;
@ property ( s t r o n g , n o n ato m ic) UIWindow *window;
@end
. , d o c P a t h ( ) ^
BNRAppDelegate.h, . ,
.
iT a h D o o d le .
iT a h D o o d le , 01
\TahDoodte
207
BNRAppDelegate.m .
, d o c P ath () , #im port, implementation (
).
#import "BNRAppDelegate.h"
/ / ,
/ /
N SString * d o c P a th ( )
{
NSArray * p a t h L i s t =
N SS earchPathF orD irectoriesInD om ains(N S D ocum entD irectory,
N SU serD om ainM ask, YES);
re tu rn [ [ p a th L is t o b je c tA tIn d e x :0 ]
s t rin g B y A p p e n d in g P a th C o m p o n e n t: 0 " d a ta . td " ];
>
^ im p le m e n ta tio n
iTahDoodle
. , iT ah D o o d le : BNRAppDelegate,
: UITableView, UITextField,
UIButton N S M u ta b le A rra y .
-0 .
208
27 iOS
. 27.4. iTahDoodle
--
--, MVC (M odel-V iew -C ontroller),
: ,
.
:
.
;
. N S S tr in g , N S D ate N S A rra y
. iT a h D o o d le
N S M u ta b le A rra y , . 0*
N S S tr in g ,
.
.
. , ^
, .
UIView , ^
U IW indow . i T a h D o o d l e
U IT a b le V ie w , U IT e x tV ie w U I B u tto n . 1
'
--
209
: - , ,
.
,
.
.
.
iTahDoodle BNRAppDelegate,
,
,
.
. 27.5
(, ).
:
; ,
.
v
V
"
*
,
. 27.5. MVC
Cocoa Cocoa Touch
^an MVC
^,
^PDeie^at* ^ , BNR-
27 iOS
210
i O S , ^
. UIApplication, .
BNRAppDelegate,
UIApplication ( ).
. , UIApplicationoT application:didFinishLaunchingW ith
O p tio n s: . . ,
,
.
iTahD oodle , , .
BNRAppDelegate.m application:
d id F in ish L au n ch in g W ith O p tio n s:.
:
#pragma mark - Application delegate callbacks
- (B O O L)application:(U IA pplication * )a p p lic a tio n
didFinishLaunchingW ithOptions: (N SD ictionary *)launchO ptions
{
/ /
/ / , .
NSArray * p lis t = [NSArray arrayW ithC ontentsO fFile:docPath()]j
i f ( p lis t ) {
/ / ,
/ / ,
task s = [ p l i s t mutableCopy];
> e ls e {
>
>
211
.) ; Xcode
. ,
.
pragma mark. 6,
.
,
; , . ,
? ,
.
iTahDoodle applic
ation: didFin is hLaunhingWit hO ptions:. , .
, .
, iOS.
. ,
, .
, ,
.
*pragma mark - Application delegate callbacks
(BOOL)application:(UIApplication * )a p p lic a tio n
didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
/ /
/ / , .
NSArray * p lis t = [NSArray arrayWithContentsOfFile:docPath()];
i f (p lis t) {
/ / ,
/ / .
tasks = [ p l i s t mutableCopy];
> else {
/ / ,
tasks [[N S M u ta b le A rra y a llo cJ init];
/ / UIWlndow.
27 iOS
/ / CGRect
/ / ( >) (w id th ,h eig h t)
CGRect windowFrame = [[UIScreen mainScreen] bounds];
UIWindow *theMindow = [[UIUindow a llo c ] initWithFrame:windowFramej.
[ s e l f setWindow:theWindow];
/ /
/ / .
/ / CGRectMake() CGRect
(x , , width, h eigh t)
CGRect tableFrame = CGRectMake(0, 80, 320, 380);
CGRect fieldFrame - CGRectMake(20, 40, 200, 31);
CGRect buttonFrame = CGRectMake(228, 40, 72, 31);
/ /
taskTable = [[UITableView a llo c ] initWithFrame:tableFrame
s t y l e :UITableViewStylePlain];
[taskTable setS ep a ra to rS ty le: UITableViewCellSeparatorStyleNone];
/ /
taskF ield = [[U ITextField a llo c ] initWithFrame:fieldFrame];
[task F ield setBorderStyle:UITextBorderStyleRoundedRect];
[task F ield setPlaceholder:@"Type a ta sk , tap Insert"];
/ / In sert
/ / .
insertButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[insertB utton setFrame:buttonFrame];
/ /
/ / "/". In sert
/ / -addTask:
[insertButton addTarget:self
action:0selector(addT ask:)
forControlEvents:UIControlEventTouchUpInside];
/ /
[ insertButton s e t T it le :@"Insert"
forState:U IC ontrolStateN orm al];
/ /
[ [ s e l f window] addSubview:taskTable];
[ [ s e l f window] addSubview :taskField];
[ [ s e l f window] addSubview:insertButton];
/ /
[ [ s e l f w in d o w ] s e t B a c k g r o u n d C o lo r : [ u iC o l o r w h i t e C o l o r ] ] j
I
iOS Simulator
213
iOS Simulator
, ;
, . Xcode Scheme
Run. iPhone 5.X Simulator
iOS:
r
[ iTahDoodte >iPhone S.0 Simulator
-vW088^-
. 27.6. Scheme
. 27.7. iTahDoodle
214
27 iOS
.
, addTask: .
; addTask:.
C o c o a T o u c h
. ,
iO S .
, application:
didFinishL aunchingW ithO ptions:, . ,
Insert ,
addTask: . ( ,
.)
, ,
. ,
,
. ,
. iT a h D o o d le
B N R A p p D eleg ate.
BNRAppDelegate.m a p p l i c a t i o n : didFinishLaunch
i n g W i t h O p t i o n s : , cooonr
, B N R A p p D e le g a te :
/ /
taskTable = [[UITableView a llo c ] initWithFrame:tableFrame
style:UITableViewStylePlaiW
[taskTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
/ /
/ /
taskField = [[UITextField a llo c ] initWithFrame:fieldFrame];
^^
Pa ^,
U IT a b le V ie w D a ta S o u rc e . L ^
BN R A ppD elegate
BNRAppDelegate.h:
~ ^ ij
^ i n t e r f a c e B N R A ppD elegate : U IR e s p o n d e r
< U I A p p lic a tio n D e le g a te , U IT a b le V ie w D a ta S o u rc e >
U IT ableV iew * t a s k T a b l e ;
U IT e x tF ie ld * t a s k F i e l d ;
U IB u tto n * i n s e r t B u t t o n ;
N SM utableA rray * t a s k s ;
>
- (v o id )a d d T a s k :(id )s e n d e r;
U IT a b le V ie w D a ta S o u rc e ,
BNRAppDelegate.
,
. co:
#pragma mark - T a b le V iew m an ag em en t
* ( N S I n te g e r ) ta b le V ie w :( U I T a b le V ie w * ) ta b le V ie w
n u m b e r O f R o w s I n S e c tio n :( N S I n te g e r ) s e c tio n
{
/ /
/ / ,
/ / t a s k s
r e tu r n [ t a s k s c o u n t ] ;
//
//
//
//
//
, ,
,
. , ,
.
if
) {
/ / ... ,
/ / .
* [[U IT a b leV ie w C ell
alloc]
i n l t U l t h S t y l e : U XTableViewCellStyleD efault
|
reuseIdentifier:"Cell"];
&
216
27 iOS
/ /
/ / ( todoItems)
NSString *item * [task s objectA tIndex:[indexPath row]];
[[c textL abel] setT ext:item ];
/ / and hand back to the ta b le view th e properly configured cell
return ;
. 27.8. iTahDoodle
,
a p p lic a tio n :d id F in is h L a u n c h in g W ith O p tio n s :.
- (B O O L )ap p lication :(U IA p p lication * ) a p p lic a t io n
didF inishL aunchingW ithO ptions: (N S D iction ary *)lau nchO p tions
{
/ /
/ / , .
NSArray * p l i s t = [NSArray arrayW ith C on ten tsO fF ile:d ocP ath ()];
i f (p lis t) {
/ / ,
/ / ,
ta sk s = [ p l i s t mutableCopy];
} e ls e {
/ / ,
ta sk s = [[NSMutableArray a l l o c ] i n i t ] j
>
/ / ta sk s ?
i f ([ta s k s count] 0) {
Put
[task s
[tasks
[tasks
||
217
some s t r in g s in i t
addObject:@"Malk th e dogs"];
addQbject :" Feed th e hogs"];
addObject:g"Chop th e lo g s" ];
>
/ / UIWindow
CGRect w indow Fram e [ [ U I S c r e e n m a in S c r e e n ] b o u n d s ];
UIWindow *theW indow = [[U IW in d o w a l l o c ] initW ithFram e:w indow Fram e];
[ s e l f se tW in d o w :th e W in d o w ];
>
.
, - .
!
U IButton a p p lication :d id F in ish L au n ch in gW ith O p tio
ns, /:
[ in s e r tB u tto n a d d T a r g e t : s e l f
a c tio n :@ s e le c to r(a d d T a s k :)
fo rC o n t r o l Ev e n t s : U I C o n tr o lE v e n tT o u c h U p I n s id e ] j
'( v o i d ) a d d T a s k :( id ) s e n d e r
/ /
NSString * t = [ t a s k F i e l d t e x t ] ;
/ / , t a s k F i e l d
i* ( [ t is E q u a lT o S tr in g :0 " " ] ) {
r e tu r n ;
}
/ /
[task s a d d O b je c t:t] ;
/ / ,
[taskT abIe lo a d O a ta ];
/ /
[task F ie ld s e t T e x t : # " " ] ;
&
218
27 iOS
/ /
[taskField resignFirstResponder];
>
resig n F irstR esp o n d er?
, .
, ,
,
, ,
(, 3er1
).
,
, becomeF irstR esponder. , I
resignFirstResponder, P
|
.
b
(, )
, . -1
, , 9
. addTask: ^
,
.
fl<
00 I 'Q
fy
iTahDoodle . ,
, ,
.
C o c o a T o u c h |
, 0
U IA pplicationD elegate,4T o6bi 0
. BNRAppDelegate.m
, :
- ( v o id ) a p p lic a t io n D id E n t e r B a c k g r o u n d : ( U IA p p lic a tio n * ) a p p l i c a tin
{
//
//
iOS 4 .0 +
ta s k s
: mainQ?
219
[ta s k s w r i te T o F ile : d o c P a th ( ) a t o m i c a l l y : Y E S ] ;
>
I ( v o id ) a p p lic a tio n W illT e r m in a te :( U I A p p lic a tio n * ) a p p lic a tio n
/ / iOS 4.0
/ / tasks
[ta sk s w r i te T o F ile :d o c P a th ( ) atomically:YES];
}
'
*
'
''
.
fi I iO S .
, .
: main()?
O b j e c t iv e - C ,
main ( ) .
C o c o a / C o c o a T o u c h ,
Cocoa C ocoa T o u ch . ,
, main.m:
return U IA p p lic a tio n M a in (a rg c , a r g v , n i l ,
N S S trin g F ro m C la s s ( [BNRAppDelegate c l a s s ] ) ) ;
, . ?
UIApplicationMain() ,
.
U IA pp lication. ,
() , .
: ,
P , .
m a in ( ) application:didF inishL aunchingW ith
^ * io n s: .
f
j
T a h D o o d le Cocoa.
iT a h D o o d le ,
;
. iO S UIT ableView, UIT e x t F i e l d U IB u tto n .
N STableV iew , . N S B u tto n ,
.
NSWindow
NSTableColumn
NSTableView
NSScrollView
NSButton
. 2 8 . 1 . TahDoodle
BNRDocument.h
221
,
.
Interface Builder, Xcode, ,
.
X code File New New Project.... Mac OS X
Application. Cocoa
Application TahDoodle. TahDoodle
, cpa . Document Extension
, ( ) .
,
tdl. TahDoodle Core D ata
.
producttame
TahDoodle
None
______ _____ _
( Previous ^) (
Next ^)
. 28.2. Cocoa
BNRDocument.h
, - BNRDocument.h, ha
*
4 *odoItems
w"a ~
^
, a itemTableView
itemT aoieview
^ m m r n todoItems.
BNRDocument NSTableViewDataSource.|
222
28
{
N S M utableA rray * to d o I te m s ;
I B O u tle t N STableV iew * ite m T a b le V ie w ;
>
- ( I B A c tio n ) c r e a te N e w I te m :( i d ) s e n d e r ;
* @end
: Insert . (
, .) -
createNewItem:.
, BNRAppDelegate. -
,
NSDocument. TahDoodle BNRDocument.
-
. , TahDoodle BNRDocument
( ).
, , tasks .
,
.
IBOutlet IBAction. Xcode: (IB O u tle t)*
(IBAction),
Interface Builder
Interface Builder
.1 ^0$I I
BNRDocumentJW
jcib (XML-*
face Builder), Interface Builder | |
( I
. NSWindow,
.
$' I
Xcode # ^ 0
Utilities. Utilities
, .
BNRDocument.xib
223
, .
Q +AQ | &
If OtrttaU
^ rffldth^
r*Hcioh!
5
w
M
^l^l^l4C
o^^w
T
<
^^^^H
w
^^ttim
^^^3W
sW
W
fiS3M
8S^R
SS^Sv^S^^^^vv^^A
'^^^A
\
11
... i ;MMmumSJr#
ControU0Ow
{*
,. :. ;.--: >4>wt4Qww^
mItleJf<mftespand*f
m#mi
, M vtnciAQ Qwtets
...........
tjffi5W....: . jH*'.l*HH
WsOwfflH
w
NiWR*fertncinj Outlcr
A0parua0Tkfetor
0 Ttxtur*d
VjUctivtdActtont
dcmtoiatttrizv:
ftQAboy* 1^ 1
makeKeyAndOrderffftm:
mloUtofizr
ard*r8 *ck
ordtrffom
| | foo%HurButton
of<kfOur
Q Mt 0n0*
p*rformCtow
pwformMiniatorizr
perfbrm2 oom:
QvwbltAiUuncti
I Q Auto tookutetts Vtow Loop
runTootbtrCustomizatkMPitote
togQftfuftScrMfl:
tog9 feT<xrfb*rSh0 wn:
toBScrew Unwpporttd
I toftrrcd Sehavk>r
DcferTtd
0 Shot
~T\
f proportional Hofjzomai
1^poftiont| V*rtlcal
Content Border [ Autoiitt
&ufored
Manual
0
0
0
0
0
0
0
0
0
0
0
0
0
)
]
Bottom
Manual
28.3. ,
U t i l i t i e s , , ,
. ,
. , Interface
Builder, ,
.
.
^ble, . , Table View,
^ NSTableView. ,
].
1 BNRDocument.xib
^ NSTableView .
( *),1) , ,
.
224
28 Cocoa
01*"<0 ^
g | AuwesttesSub^twi
1&:^^
I^j^i^
^*^** ?^^1~^^~jD
-^.-iSW^^^^aw^K^-yf>^j^yjW^^^*1
*="
'***|^
*""S
* "?'*
' * * V iw r - Dtepbyi rccord^ntflM
5
Mw^wiewww^wwww^^wwwwwewwwAWwwwvwxmv^wwflwwxwwihttwxwww^wewRtWM<
j;_#c*w
. 28.4. NSTableView
:
.
Human Interface Guidelines (HIG) *
Apple ,
Mac. 10
HIG iPhone iPad. H IG 01
.
^
. *
, &1
. N S T a b le V ie w *
, ,
: N S S c r o l l V i e w , NSTable ^
N S T a b le C o lu m n . #
, Control Shift Hi ^
. (
. N S T a b le V ie w .
B N R D ocum ent^^^
**$
,Window
Text Cell
Text Cell
lmm Window
f
N f NSWindow
Vicw
NSView
N5ScroltVfew
Vlcw
NSTableView
Cotumn
_J
NSTableCotomn
. 28.5.
,
. ,
.
TextC*ii
^^^1 !
' '
. 28.6.
0
| 0, (/) p
,
P*-
- .
226
28 Cocoa
.^jHMifeMto
49
20 0
,_____ *
467|Q
Width
4 4 ]
Height
Origin
I
I||^I
I
5
*
I
Autosi1)n 9
Example
. 28.7.
|
^
BNRDocument.xib
227
.
. NSButton .
, ;
(Rounded Rect B utton). ,
;
.
In sert.
,
,
.
. 28.8. Insert
, ,
TahDoodle: N S T ableV iew N S B u tto n , . ,
.
.
N S B u tto n ,
,
:
Interface Builder,
?
^ 6oej. iTahDoodle
^ ,
Interface Builder.
228
28 Cocoa
f l|
:
*
T*hOoodH
,^T*WXxxa**
8roHapow*
1 i
utm
.*~. ***
*Mt^ejtf*^^iflbrieK8fttiai*i*Se*jti**__,^_
$ . ^9*. ) >^4
| !
^^
f * NRO<x u m # n t. < fb
Xtodt
& . t*hOeortto ^
|
T*hOoo<ite.*cod*prQi ~ -
^ *.*.._
TMWMtw
f W # '* O w n f f
*aW W A*OMMftM<*
$.
/
7Wt , |
yswe*
.
;'^G
tfwfbd**^
g j ^ --------- ^ t |
SHW*WC.1#
00
ttgUMteftUMl
!.0A*ftc*kt&
ffcvtab#
^ J te w e rtb *
Swm 'Mtfl*dtouMor
j tofcfffdM*riV
fctfS_JOdtaeiJetod
Mmiet0 u!#i*
!3122__ t'fi"Jj
IW?4*
W BH dHrtH W W fl^
M i * MtfMfb > .
ir:
flWfM0C<01Uf^W(AfKJdWfte4..
Rounded R*ct taROff - Mtnw
} mopmfow*WBBui *
_;rtWVH'lWWl*W*''^
j
(0 b u t t o n
.~ 'iL
. 28.9. BNRDocument.xib
Interface Builder
.
, /
.
\
(Placeho
. (docum ent outline). (&J
, 0 > 0
.)
^
P la c e h o ld e rs F i l e ' s Owner. ^
, ^^
, File* s Owner ,
^
. 43
Owner BNRDocument.
, Q^<
Insert Fw
Control.
, >i'n ii^w.>^ha^ ii. Ta.*i-..^.-^,.-: , ^^. , _
HiccboUkii
| Fll*4 Owrvtr
ftrtX Rt&pon<tar
dbAppHcatioft
Column
*ffT ScroHer
_ | ScroHer
| Header Vlew
^ * Pusb Button
~ _ ^
V|W
. 28.10.
n*ccMd*r&
^_ ^'<SK'owiy
jP First Reipo<uter""^"
^&
Objeeu
v^M m
v <; v^w
; Scrofl Vicw -
^TabteV*ew
^Scro#tr
ScwBtr
Tafcie Header Vkcw j
. 2 8 .1 1 .
229
23 0
28
,
. createN ew Item :
,
(. 28.12)
0 PUc*hokters
,: FUc4 Owner
First Responder
^^
r^ApphcatK>n
ftO b*ects
I Wmdow
I
ijV tew
f^ScrottView
iv?d Aaiofts
createNewKem
^
printDoeuroeni:
reveftDocumentToSaved
I
funPa9 eLay0 ut:
saveOocumem
saveDocumentAs:
saveDocumentT:
_____
Window
TaWeVtew
Scrotter
Header View
. 28.12.
/ .
"
iT a h D o o d le :
fm
ic w
^ R
i vD
b /ocum
u L u i i ien
v i ^t.. -
- *
*
ite m T a b le. cVv ie
w r w ia^ c a uBiN
Control Files O w ner ( B N R D o c u fflfl*
NSTableView .
: ite m T a b le V ie w .
&?
, * ^
Control Shift, N STableV iew . ^ ,^c
Control File's Owner 8
dataSource.
ffiF NmfcoHt n
$*
RfSt*MPOf^Ww
4bAp0teHOft
0 Oty*cti
*fJ*todew
?ffcview
f Sonoil Vkw - * vta*
^Tsbk $
^Scro#er
^Scfoller
T*tofe Header Vttw
Pwb Button
&:fcmonCttt
. 28.13.
. 28.14. ,
232
28 Cocoa
, ?
BNRDocument NSTableV iew. Interface
Builder, NSTa
bleV iew , . ,
, d a ta S o u r c e .
In te rfa c e B u iId er, d a t a S o u r c e
BNRDocument.
iTahDoodle
[taskTable setD ataS ou rce:self];
I B O u t l e t I B A c t i o n ,
Interface Builder, :
IB, !
Interface Builder IBOutlet
I B A c tio n , .
I B O u t l e t I B A c ti o n :
#d efin e IBAction void
#d efin e IBOutlet
, # d e f i n e , ,
IB A c tio n v o id , ,
a I B O u t l e t . , I B O u tle t , IBAction
v o id , ,
, .
, XIB
, .
XIB .
, . .
,
. coo6ffl#1
BNRDocument, .
BNRDocument ,
.
MVC
, .
:
B N R D ocU m enfr^
233
NSButton
action = createNewltem
itemsTableView
dataSource
BNRDocument
NSMutableArray
. 2 8 .1 5 . TahDoodle
NSDocument , BNRDocument, -
. .
N S D o c u m e n t ,
, - . N S D o c u m e n t
,
. B N R D o cu m en t NRDocument
( NSMutableArray
N S S trin g ).
BNRDocument.m
,
, .
B N R D ocum ent.m ,
, c r e a t e N e w I te m :.
#import "BNRDocument.h"
^implementation BNRDocument
#pragma mark - NSDocument O verrides
^ (NSString *)windowNibName
return fl"BNRDocument";
234
28 Cocoa
>
#pragm a mark - A c tio n s
- (IB A c tio n ) c r e a te N e w Ite m :(id ) s e n d e r
{
/ /
i f ( ! to d o I te m s ) {
to d o Ite m s = [N SM utableA rray a r r a y ] ;
>
[to d o Ite m s addO bject:0"N ew Ite m ] ;
/ / -re lo a d D a ta
/ / (
/ / BNRDocument)
[item T ableV iew r e lo a d D a ta ] ;
/ / -updateC hangeC ount: ,
/ / . NSChangeDone
/ / .
[ s e l f updateC hangeC ount: NSChangeDone] ;
>
( NSTableViewDataSource):
#pragma mark Data Source Methods
- ( N S I n te g e r) n u m b e r O fR o w s In T a b le V ie w :( N S T a b le V ie w * ) t v
/ / todoIte*<
/ /
/ / ,
return [todoItem s count];
>
- (id )ta b leV iew :(NSTableView *)tableV iew
objectValueForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row
/ / t o d o I t e m s , ,
//
>
- (void)tabXeView:(NSTableView *)tableView
BNRDocument.m
235
s e tO b je c tV a lu e :( id ) o b j e c t
f o rT a b le C o lu m n : (N S T ab leC o lu m n * )tab leC o lu m n
r o w : ( N S I n te g e r ) r o w
/ / ,
/ / todoItem s
[todoItems replaceObjectAtIndex:row w ith O b je c t:o b je c t] j
/ /
.
[s e lf updateChangeCount:NSChangeDone];
}
. TahDoodle ,
.
: . , ,
OTNDocument BNRDocument:
- (NSData * ) d a t a O f T y p e : ( N S S t r i n g * )ty p eN am e
e r r o r :( N S E r r o r * * )o u tE rro r
{
/ / .
/ / NSData
/ / ,
/ / ,
i f (!todoItem s) {
todoItems * [NSMutableArray array];
>
/ / todoItem s NSData
NSData *data = [N SP rop ertyL istS erialization
d a t a W i t h P r o p e r t y L i s t :to d o Item s
f o r m a t : N SPropertyListX M LForm at_vl_0
o p tio n s :0
e r r o r : o u tE rro r];
/ / NSData
return data:
(BOOL)readFromData: (N S D ata * ) d a t a
o f T y p e :( N S S tr in g * )ty p eN am e
|
e rr o r:( N S E r ro r * * )o u tE rro r
/ / .
/ / NSData
// todoItems
_..,,*j?
236
28
to d o Ite m s [ N S P r o p e r t y L i s t S e r i a l i z a t i o n
p r o p e r ty L is tW ith D a t a :d a ta
o p t i o n s : N SP ropertyL istM utableC ontainers
form at:N U LL
e rro r:o u tE rro r];
/ /
/ /
r e tu r n (to d o Ite m s != n i l ) ;
}
: NSError**.
N S E rro r, propertyList
W ith D a ta : o p t i o n s : f o r m a t : e r r o r : ,
N S E rro r.
. .
' , ^ ^ ,, ^ ^
N S E r r o r
N S E rro r,
(
Objective-C
Objective-C ,
iOS Cocoa. ! ,
O bjective-C .
N SO bject i n i t .
i n i t , .
, a llo c , a i n i t .
i n i t :
N S M u tab le A rray * t h i n g s = [[N S M u ta b le A rra y a l l o c ]
in it];
, i n i t , .
NSObject. , .
init
: F o u n d a tio n ^
A ppliances. : AppliancenOwne P
p lia n c e ( A ppliance). A p p lia n c e ()
productName ( ) v o lta g e ().
OwnedAppliance : N SO bject Appliance. ^
Appliance.h ^
ductName v o lta g e :
# im p o r t < F o u n d a tio n /F o u n d a tio n .h >
@ i n te r f a c e A p p lia n c e : N S O b ject {
NSString *productName;
in t voltage;
>
0end
( copy 30.)
Appliance
, )nt voltage
~
,
J NSString *productName |
-init
|-initWithProductName:
\
J
................. .................
p ~ ~ * 2 ~ * * ~ * ** ***?* ~ **-
i
OwnedAppliance
^ ~ -~ -~ ~ ~ ~ ~ ~ ~ ~ -~ -~ ~ ~ ~ -~ -~ -'
i NSMutableSet *ownerNames
%*m~,m~ i ~ ~ ~ ~ ' ... - i.i . . J
] -frMtVWthProductName:
*-initWithProductName1irstOwnerName:
J * * 4**. - - ~ * - - - *- - -
A p p l i a n c e :
A ppliance *a [ [ A p p l i a n c e a l l o c ]
in it];
A p p l i a n c e i n i t , i n i t ,
N S O b je c t. , ,
A p p l i a n c e , .
ProductName A p p l i a n c e n i l , v o lt *8* .
" init
p tf KO, J^ WX
> .
, .
jH
, A p p lia n c e v o lta g e
120. Appliance.m -1
i n i t , i n i t NSObject.
- (id )in it
{
/ / i n i t NSObject
s e l f = [super i n i t ] ;
/ / v o ltage
v o lta g e = 120;
/ / ob ject
return s e l f ;
>
A p p lian ce voltageno
120. (,
. ,
,
s e tV o lta g e :.)
i n i t ;
, ,
.
. init.
:
i n i t - ,
, .
i n i t ,
n il .
Apple , s e l f
, i n i t .
i n i t .
A pple ,
, n il. -
i n i t Apple:
- (id )in it
{
/ / i n i t N S O b ject
self [super i n l t J ;
// , nil?
i f (s e lf) {
// voltage
voltage = 120;
}
return s e lf;
, , O bjective-C
. ,
Apple i n i t .
i n i t A p p lia n c e ,
, .
i n i t ,
. i n i t :
30
- (id)init
j#
{
/ / i n i t N S O b je c t
s e lf = [s u p e r i n i t ] ;
/ / , n i l ?
if (s e lf) {
4>\
/ / v o l t a g e
[ s e lf s e tV o lta g e :1 2 0 ];
>
re tu rn s e l f ;
^ -
| . :
i n i t ! %^ ^ ,
I ^ i n i t . :
vf' P 1}. .
, . *
^
.
init
, . ,
Appliance (n il ).
- ,
.
i n i t , i n i t .
, .
Appliance :
Appliance *a = [[A ppliance a llo c ] initWithProductName:@"Toaster"];
in itW ith P r o d u c tN a m e : -
N S S tr in g . Appliance.h:
#import <Foundation/Foundation.h>
@interface Appliance : NSObject {
NSString *productName;
in t voltage;
>
(id)initMithProductName:(NSString *)pn
/ / in it NSObject
s e lf = [super in it ] ;
/ / , n il?
i f (s e lf ) {
4^jth'
i<1
.
//
[se lf setProductName:pn];
// voltaee
[self setVoltage: 120 ];
}
return s e lf;
,
.
Appliance .
Appliance.h Appliance.m ,
, initWithProductName:. ,
A p p lia n c e ?
Appliance *a = [[Appliance a llo c ] i n i t ] ;
. ,
Appliance NSObject , NSObject. NSObject init.
,
A p p lia n c e nil
v o lta g e . ,
Application voltage, 120,
, n i l . ?
: Appliance.m init,
initW ithProductNam e : .
* (id)init
{
return [self initWithProductName:0"Unknown"];
>
i n i t initWithrductName:, .
description.
Appliance.m:
* (NSString *)description
return [NSString stringWithFormat:0"<%0: %
d volts>", productNae,
voltage];
main.m\
#import <Foundation/Foundation.h>
#import "Appliance.h"
in t main (in t argc, const char * argv[])
{
@autoreleasepool {
Appliance *a = [[Appliance a llo c ] i n i t ] ;
NSLog(#"a is %0", a);
[a setProductName:0"Washing Machine"];
[a setVoltage:240];
NSLog(0"a is%0"> a);
>
return 0 ;
>
.
. - cy6
A p p lia n c e OwnedAppliance.
Choose options for your new flte:
C c*nc<l )
. 29.2. Appiiance
init
245
O w n e d A p p lia n c e .h
.
#import "A ppliance.h"
#interface OwnedAppliance : Appliance {
NSMutableSet *ownerNames;
>
(id)initW ithProductNam e:(NSString *)pn
firstOwnerNam e:(NSString *)n;
- (void)addOwnerNamesObject:(NSString *)n;
- (void)removeOwnerNamesObject:(NSString *)n;
#end
,
OwnedAppliance.m :
#import "OwnedAppliance.h"
#implementation OwnedAppliance
- (id)initMithProductNam e:(NSString *)pn
firstOwnerName:(NSString *)n
{
//
se lf = [super initW ithProductName:pn];
i f (se lf) {
//
ownerNames = [[NSMutableSet a llo c ] in it ] ;
// n il?
i f (n) {
[ownerNames addObject:n ];
>
>
//
return s e lf;
>
# *
246
29 init
{
[ownerNames removeObject:n];
>
@end
: v o lta g e productNa*
initW ithProductNam e: Appliance.
,
, ; ,
, .
, Appliance i n i t . -
, :
OwnedAppliance *a = [[OwnedAppliance a llo c ] initWithProductName:0"Toast
e r"];
initWithProductName:
Appliance. ownerNames, ,
ownerNames
OwnedAppliance.
.
OwnedAppliance.m in itW ith P r o d u ct
Name:, initWithProductName:firstOwnerName:
firstOwnerName.
- (id)initWithProductName:(NSString *)pn
>
: i n i t OwnedApplianC
. :
OwnedAppliance *a = [[OwnedAppliance a llo c ] in it ] ;
? i n i t OwnedAppl*anC
i n i t
[ s e l f initW ithProductNam e:@ "Unknow n"]. se lf r $
OwnedAppliance, i n i t W i t h P r o d u c t N a
OwnedAppliance, [ s e l f initWithProductNan>6,
firstO w nerNam e:nil].
, ^
.
. 29.3
*
^
^*^
^
f*MfnJ^
. , init
NSObject, initWithProductNaee: A p p lia n ce , a in itW ith P rod u ctN am e : firstOwnerName: ~
OwnedAppliance. .
,
( ) .
,
( Appliance OwnedAp
pliance),
. Appliance.k
#import < F o u n d a tio n /F o u n d a tio n .h >
@ interface A p p lia n ce : NSObject {
NSString *productName;
int voltage;
}
0end
OwnedAppliance.h:
#import " A p p lia n c e .h "
#*0 *
^ interface Ow nedAppliance
: A p p lia n c e {
248
29 in it
NSMutableSet *ownerNames;
>
//
- (id)initWithProductName:(NSString *)pn
firstOwnerName:(NSString *)n;
- (void)addOwnerNamesObject:(NSString *)n;
- (void)removeOwnerNamesObject:(NSString *)n;
0 end
, , Objective-C :
,
.
. ( ).
.
,
,
.
,
, .
init
, #
.
NSObject WallSafe,
initW ithSecretCode:. secretCo
. , ^
i n it .
? WallSafe - ?
in it. - :
WallSafe *ws - [[W allSafe a llo c ] i n i t ] ;
inrt
249
,
,
, :
| (id)init
{
A p p l i a n c e , : p r o d u c tN a m e v o l t a g e . ,
Appliance.h
{
>
N S S trin g * p ro d u ctN am e;
i n t v o lta g e ;
. :
( v o id )s e tP ro d u c tN a m e :( N S S trin g * ) s ;
(N S S trin g *)pro d u ctN am e;
( v o id )s e tV o lta g e :(in t)x ;
( in t) v o lta g e ;
@ p ro p e rty :
- (v o id )s e tP ro d u c tN a m e :(N S S trin g * ) s
{
>
productName [s co p y ];
- (N S String *)productName
{
r e tu r n
>
productName;
C
j
N
s
2S l
- (v o id )s e tV o lta g e :( in t )x
{
'}
v o ltag e x;
|* - ( in t) v o lta g e
P{
>
retu rn v o lta g e ;
@synthesize:
gsynthesize productNam e, v o lta g e ;
O b jective-C:
iO S 6 4 - M a c O S X
. @ p ro p e rty /@ s y n th e s iz e ,
.
A p p l i a n c e .h :
{
}
/ / NSString *productNam e;
/ / in t v o lta g e ;
.
.
3 2 - Mac OS X.
.
,
.
/ (readw rite)
( read o n ly ). readurite,
, s e t - , g e t -. ,
s e t -, readonly:
ft>roperty (readonly) i n t v o lta g e ;
252
30
unsafe_unretained, strong,
weak . , s e t - .
unsafe_unretained ;
.
:
I
j
I
jj|fH
jil|
00
II
II
s e t - .
- (void)setAverageScore:(int)d
{
averageScore = d;
>
II
! [x
|ffl
HithZ
1
strong.
weak . set, .
n i l. ( :
unsafe_unretained, ,
, *>>.
.)
.
,
...
fel
* 1111'1
;
%e
Rlpw6^ caov*ST~~^
0property (copy) NSString *lastName;
gsynthesize lastName;
s e t - :
. (void)setLastName:(NSString *)d
{
lastName = [d copy];
>
,
. , NSString NSMuta b le S tr in g . , setLastName:
:
//
- (id)copyWithZone:(NSZone *)z
{
retu rn s e l f ;
}
, . ( , NSZone
,
C o c o a , . ,
copyWithZone:
.)
, ,
^ . , NSMutableString
**W NSString. ,
, mutableCopy.
mutableCopy .
, s e t - ,
^ * , mutableCopy
^AHoro . , OwnedAppliance
*tOwnerNames::
Z54
30
- (void)setOwnerNames:(NSSet *)newNames
{
ownerNames = [newNames mutableCopy];
>
Objective-C copyWithZone:,
Objective-C ,
, mutableCopy NSObject
:
- (id)copy
{
return [ s e lf copyWithZone:NULL];
>
- (id)mutableCopy
{
return [ s e lf mutableCopyWithZone:NULL];
>
,
Appliance *b = [[Appliance a llo c ] i n i t ] ;
Appliance *c [b copy];
:
-[Appliance copyWithZone:]: unrecognized selector sent to instance
0x100110130
^ffiT
, a t o m i c / n o n a t o m i c
^^^^^|^|^|^^^^^^
. ^^|^f|
: nonatomic s e t -
^
U I K it , , 11- .
nonatomic. n ^ p
( .
^
, , . :
^-o
, ooeci
^*
s e t - * . : , ^ ^
. , s e t - 08
255
. *. , s e t -
. , .)
Appliance.h
nonatomic:
*productName;
, ato m ic
, .
-
- .
NSObject,
main.m
[ m
a in .m
in t main ( i n t a r g c , c o n s t c h a r * a r g v [ ] )
0 a u to re le a se {
fJiI"
256
30
v a lu e F o rK e y : , NSObject, ^
productName. productName ,
.
,
,
main.m:
NSLog(@"the product name i s %@",
[a valueForKey:@"productNammmme ]);
:
*** Terminating app due to uncaught exception 'NSUnknownKeyException',
reason: '[<Appliance 0xl00108dd0> valueForUndefinedKey:]:
t h is c la s s is not key value coding-compliant fo r the key
productNammmme.'
, .
- ? ,
, j
s e t V a lu e :f o r K e y :. , j
, v a lu e F o rK e y : . ,
Data SQLite
. , ,
-.
, -
, @ property productName eAppliance.h:
#import <Foundation/Foundation. h>
@interface Appliance : NSObject {
NSString *productName;
in t voltage;
>
// 0property (copy) NSString *productName;
gproperty (nonatomic) in t voltage;
//
- (id)initWithProductName:(NSString *)pn;
@end
se tP r o d u c tN a m e 11 |
ductName Appliance.m\
*57
0iwplementation Appliance
^synthesize voltage;
- (id)initWithProductName:(NSString *)pn
^
self * [super i n i t ] j
i f (self) {
productName = [pn copy];
[s e lf setV o ltag e: 120 ];
>
return s e lf;
}
(id )in it
return [ s e lf initWithProductName:@"Unknown"];
(NSString *)description
return [NSString stringWithFormat:@"<%@: %d
productName, voltag e];
volts>",
0end
.
productN am e,
. - ,
, . -
, .
-
- ,
8 : - ( , int float (* voltage i n t ) . voltage
- ? NSNumber.
main.m , voltage:
[a setVoltage:240];
:
1* &etValue.-[NSNumb numberWithInt:240] f o r K e y : 0 " v o lt a g e " ] ;
258
30
Appliance.m :
- (void)setV oltage:(int)x
{
.
valueForKey:@"voltage"
NSNumber, voltage.
*
. , A p p le NSString.
, N S S t r i n g .
Foundation VowelCounter. , Objective-C
(Objective-C c a t e g o r y ) . VowelCounting
N S S t r i n g .
NSString+ VowelCounting.h
NSString:
#import < F o u n d a tio n /F o u n d a tio n .h >
0end
NSString+ VowelCount.tn.
#import "NSString+VowelCounting.h"
260
31
main.m:
#import <Foundation/Foundation.h>
#import "NSString+VowelCounting.h"
in t main ( in t argc, const char * argv[])
{
@autorelease {
NSString *string = @"Hello, World!";
NSLog(@"%@ has %d vowels", s trin g , [strin g vowelCount])j
>
return 0 ;
>
. , ?
.
Vr0
, ,
, ,
.
24 :
.
- .
, .
,
, .
, Callbacks 24
,
zoneChange:.
, , zoneChange:
, . Callbacks
, , ,
.
Mac OS X 10.6 iOS 4
(blocks). Objective-C ( ), .
, .
Objective-C, .
8 Apple .
, .
, ,
bI ,
-. ,
- , ,
,
.
:
{
>
, .
. , ,
, :
^(double dividend, double d iv is o r) {
double quotient = dividend / d iv is o r ;
return quotient;
>
double.
, .
? . (, ,
5).
, .
, , .
.
Foundation Vowel
M o v e m e n t. 0
.
: ,
, , main.m
@autoreleasepool:
int main (in t argc, const char * argv[])
^ rm w m * w m
u/fUMnuH
0a u to relea sep o o l {
/ / , ,
/ /
NSArray * o ld S tr in g s [NSArray arrayHithObjects:
" S a u e r k r a u t" j Q"Raygun", "Big Nerd Ranch\
& " M is s is s ip p i" , n i l ] ;
NSLog(0"old s t r i n g s : %Q", o ld S tr in g s );
NSMutableArray * n ew S trin g s = [NSMutableArray array];
// ,
NSArray *vowels = [NSArray arrayH ithO bjects:
0 "a"j 0 " e " , g " i " j Q"o", 0 "u", n ilJ ;
}
return 0;
)
; .
.
.
- ' ^
^
"
^
^
^
.
,
main.m,
int main (in t argc, co n st ch ar * a rg v [])
0autoreleasepool {
* ,
/ / ,
/ /
,,n*hnM ects:
NSArray *oldS trings = [NSArray a^ra^,.Bi Ner(j Ranch",
0"S auerkraut", 0"Raygun , 0 Big Nera
@"Mississippi"* n i l ] ;
NSLog(0"old s trin g s : %@", o ld ? ^ ^ f a b le A r r a y array];
NSMutableArray *newStrings = [NSMutabieA
/ / ,
NSArray *vowels = [NSArray arrayW ithObjects.
@"a", @"e", @"i ", @"o", Q"u"* n l l J'
&
//
void (^ devow elizer)(id, NSUlnteger, BOOL *);
}
return 0;
>
, .
. 32.1.
, -
, in t i. ,
. . devow elizer ,
, BOOL
.
.
main.m :
in t main (in t argc, const char * argv[])
@ a u t o r e le a s e p o o l {
// , >
//
NSArray *oldStrings [NSArray arrayWithObjects:
@"Sauerkraut", @"Raygun", @"Big Nerd Ranch",
@"Mississippi", n il] ;
NSLog(0"old strings: %@", oldStrings);
NSMutableArray *newStrings * [NSMutableArray array];
^^^
// ,
fo r (NSString *s in vowels) {
NSRange fullRange = NSMakeRange(0, [newString length]);
[ newString replaceOccurrencesOfString:s
withString:0""
options:NSCaseInsensitiveSearch
range:fullRange];
[newStrings addObject:newString];
}; //
}
return 0;
}
, .
.
, ( )
d e v o w e liz e r. :
;, .
d e v o w e liz e r ,
:
void (^ d ev o w elizer)(id , N SUlnteger, BOOL *) = ^(id string, NSUlnteger
i , BOOL *stop) {
NSMutableString *new String * [NSMutableString
strin g W ith S trin g :strin g ];
//
//
f or (NSString *s in vowels) {
NSRange fullR ange = NSMakeRange(0, [newString length]);
[newString replaceO ccurrencesO fString:s
w ithString:@ ""
options:NSCaseInsensitiveSearch
}
[new Strings addO bject:new String];
};
,
devow elizer,
devow elizer.
d e v o w e lize r , .
NSArray enumerateObjectsUsingBlock:.EMH ,
.
main.m , enumerateObjectsU singBlock: devowelizer,
.
in t main ( in t arg c, const char * arg v[])
@ autoreleasepool {
// , ,
//
NSArray * old S trin g s = [NSArray arrayWithObjects:
@"Sauerkraut", @"Raygun", @"Big Nerd Ranch",
@ "M ississip p i", n i l ] ;
NSLog(@"old s tr in g s : %@", o ld S trin g s );
NSMutableArray *newStrings = [NSMutableArray array];
// ,
NSArray *vowels = [NSArray arrayWithObjects:
@"a", @"e , @4 " , @"o", @"u", n i l] j
//
v o id (^ d e v o w e liz e r)(id , NSUInteger, BOOL *)j
//
devow elizer = ^(id s t r in g , NSUInteger i ,
BOOL *stop) {
for
( N S S trin g *s in
vowels) {
withString:@""
options:NSCaseInsensltiveSearch
^ " \
r a n g e :f u l lR ange];
}
fnewStrings addObject:neuString];
}; //
/ /
[oldStrings enumerateObjectsUsingBlock:devowelizer];
NSLog(0"new s t r in g s : %0, new Strings)j
}
retu rn 0 ;
}
. .
.
2011-09-03 10:27:02.617 VowelMovement[787:707] old s tr in g s : (
Sauerkraut,
Raygun,
"Big Nerd Ranch",
Mississippi
)
2911-09-03 10:27:02.618 VowelMovement[787:707] new s tr in g s : (
S rk rt,
Rygn,
"Bg Nrd Rnch",
Msssspp
)
, e n u m e ra te O b je c ts U s in g B lo c k :
. , ,
, BOOL,
^. , d e v o w e liz e r,
.
.
. . id, ,
Nsuit 0 ) .
nteger .
268
32
BOOL, N0. ,
,
:
devow elizer ^(id s t r in g , NSUInteger i ,
BOOL *stop){
/ / " "?
if
}
NSMutableString *newString = [NSMutableString
strin g W ith S trin g :strin g ];
//
//
fo r (NSString *s in vowels) {
NSRange fullR ange = NSMakeRange(0, [newString length]);
[newString replaceO ccurrencesO fString:s
w ithStrin g:@ ""
o p tio n s :NSCaseInsensitiveSearch
range:fu llR a n g e ];
>
[newStrings addObject:newString];
}; //
, #
. ,
YES ( ), #
.
.
,
. S rk rt.
, .
,
. o6pa
24, :
[ [N S N o tifica tio n C e n te r de fa u ltC en ter]
addObserver: logger
( @selector()),
- :
I (yoid)zoneChange:(NSNotification *)note
NSLog(@"The system tim e zone has changed!'');
}
NSNotificationCenter
addObserverForName: o b je c t: queue: usingBlock: .
NSNotificationCenter
,
- .
, NSNotificationCenter, .
( Callbacks .)
typedef
,
ty p e d e f , 10. ,
ty p e d e f ,
- . main.m :
#import <Foundation/Foundation.h>
typedef void (^A rrayEnum erationBlock)(id, NSUlnteger, BOOL *);
int main (in t argc, const char * arg v [])
ty p e d e f .
& , ,
*^> . typ edefyn pou iaeT
I ^ . devow elizer:
void (^devowelizer)(id, NSUlnteger, BOOL *);
^ :
ArrayEnumtrfttionBlock devowelizer;
270
32
l
, .
, .
;
.
, ,
.
double (^divBlock)(double,double) = ^(double k, double j) {
return k/j;
>
divBlock,
double double .
,
.
:
double quotient = divBlock(42.0, 12.5);
, , .
,
, .
, -
, .
.
,
ArrayEnumerationBlock iVarDevowelizer = [devowelizer copy];
, *
.
, (, enum erateO bjects
ingBlock: KflaccaNSArray addObserverForName:object:queue:using
ck: N S N o tifica tio n C e n te r), &10
.
,
l l C *
271
, , ,
. , .
, .
.
, ?
( ,
), .
,
.
.
, . , ,
,
, . ( ,
? -
!)
VowelMovement. devowelizer
, : newStrings (
) string ( ,
). devowelizer ,
, .
?
, . : .
C__weak), .
, ?
, ,
, . ,
. (
, ,
.)
.
block. ,
counter;
__block int counter 0;
void (AcounterBlock)() A{ counter++; >;
4 (
&
272
32
counterBlock(); // counter 1
counterBlock(); // counter 2
_block , , counter
, ,
. , ,
M a c iO S . 1 .
, A L A s s e tL ib r a r y G a m e K it
.
A p p le , .
, .
( , numberW i t h I n t : NSNumber), i n t :
// 1:
in t i ;
i = 5;
NSNumber *num = [NSNumber numberWithInt:i];
// 2:
NSNumber *num = [NSNumber numberWithInt:5];
,
. , <^
. ^
;
.
273
,
enum erateO bjectsU singBlock: . , ,
.
NSNotificationCenter
24 addO bserver: s e l e c t o r : name:o b je c t : NSNotifica
tionCenter
zoneChange:. ,
addO bserverForN am e:object:queue:usingB lock:.
.
,
,
. , zoneChange : , ,
, .
(N S N o tific a tio n *)
, zoneChange:.
queue: nil;
, .
O b je c tiv e - C
,
^^^ ^. , ,
^^ .
Ynm 6^ ,
.
,
. ; 1
, 0 .
,
. 8-
, 2(.
33.1).
128
64
32
16
32 + 16 + 8 + 4
=60
. 33.1. , 60
||^ ^ S
, 10 .
2. ^
(16 24)
.
.
^ ^
a, b, , d, e f. ,
: 0, 1, 2, 3,4, 5, 6, 7, 8, 9, a, b, , d, e, f, 10, 11,...
, ,
0x. I la . 33.2 , . 33.1 uiec
.
V\r\V\
0 x 8 0 0 x 4 0 0 x 2 0 0 x 10 0 x 8
*77
0 x 4 0x2 0x1
0
0x20+ 0x10 + 0x8 + 0x4
. 33.2. ,
= 0x3c
0x3c
( , ) . . ,
- : ,
.
? T e rm in a l hexdump :
$ hexdump m
0000000
0000010 2 e
0000020 7 3
0000030 6 b
0000040 2 2
0000041
y f ile .t x t
3 f78 6d
3022 3 f
3d 2 2 6 8
2e6f 7 2
74
67
20
0a
74
2f
76
70
6e
65
62
73
72
6f
2f
2f
73
6f
2f
64
69
6b
64
6f
6f 6 e
3d
20 7 8 6d
6f 6 3 6 2
6 3 6 2 6f
22
6c
6f
6f
31
6e
6f
6b
( )
, .
.
;
. 1 ,
1.
| .
: (
Foundation!) bitw ize.
main.c.
#include <stdio.h>
|nt main (int argc, const char * a r g v [ ] )
unsigned c h a r ;
278
33
I
1
printf("Hex: %x | %x = %x\n", , b, );
p rintf< "Decimal: %d | %d = %d\n", a, b, ) ;
return 0;
jJ
1 | 1
0x3c
= Oxbd
. 33.3.
:
Hex: | a9 = bd
Decimal: 60 | 169 = 189
? Objective-C
.
, ,
/ . (
) , . ,
,
. ,
, .
. iOS NSDataDete cto r. NSDataDetector
, URL-.
.
fyauRe NSDataDetector.h : NSTex
LinK>
CheckingTygepate, NSTextCheckingTypeAddress, NSTextCheckingType
NSTextCheckingTypePhoneNumber N S T e x tC h e ck in g T y p e T ra n sitIn fo rm a tio
NSDataDetector ,
. , Z ?
:
NSError *e;
C o c o a iO S;
.
. 1 ,
1.
= 0x3c
= 0xa9
= 0x28
33.4.
&. main.c
:
#include <stdio.h>
int main (in t argc, const char * a rg v[])
{
unsigned char - 0x3c;
unsigned char b = 0xa9;
unsigned char = a | b;
printf("Hex: %x | %x %x\n", a, b, );
printf("D ecim al: %d | %d %d\n", a, J );
280
>
:
Hex: & a9 = 28
Decim al: 60 & 169 = 40
Objective-C
( ). ,
NSDataDetector ,
:
if
unsi
>
JQjrir
\ Z Z Z Z Z Z Z Z Z ^ _ _ _ _ _ _ _ _ _ _ _ _ ;_ _ _ ^ _ _ _ _ _ ^ ^ ^ ^ ^ ^ _
checkingTypes ,
,
N S D ataD etecto r.
NSTextCheckingType, . , NSTextCheckingTypePhoneNumber, NSDataDetector,
.
, , NSDataDetector .
prifi
retu
^PorpajM
| *tex:jc
x:
I ^^
| |
___
S*
5r
onepa^
. Objective-C, .
iH i
!.
f^ V ^
\%
.
|<* ' II ^
1 , - j %.Q4
sS^
=0x3c
=0xa9
=0x95
281
. 33.5.
^, main.c
:
unsigned char e a A b;
printf("Hex: %x %x = %x\n", a, b, e);
printf(''Decimal: %d %d = %d\n", a, b, e);
return 0;
}
:
Hex: a9 = 95
Decimal: 60 ^ 169 = 149
.
: 2^3 2 3.
pow():
double = pow(2.0, 3.0); // 2
: ,
.
~ .
nuan.c.
282
33
= 0xa9
= 0x56
. 33.6.
:
Hex: The complement of a9 is 56
Decimal: The complement of 169 is 86
. , , ,
.
0
/V V 2 s
_ 2
_____ l>r
d/
jf
Jf
/
0
= 0x3c
0
7------
/
0
0xf0
. 33.7.
<<. matn
:
unsigned char g << 2 ;
printf("Hex: shifted le f t tw o places is %x\n", a, g)>
printf ("Decima1:
jg
%d\n"
^ ^^ E)>
return 0 ;
}
:
Hex: sh ifte d l e f t two places is f0
Decimal: 60 s h ifte d l e f t two places is 240
.
:
unsigned char h = >> 1 ;
printf("H ex: %x s h ifte d rig h t one
printf("D ecim al: %d s h ifte d right
return 0 ;
>
:
Hex: 3c shifted rig h t one places is le
Decimal: 60 sh ifte d rig h t two places is 30
1 H~0~ =0x3c
0 / =0x1e
. 33.8.
enum
,
.
284
33
( . ) .
^ ^ k
. Ham> ^
U ID a ta D e te c to r :
^enum {
U ID ataD etectorT ypePhoneN um ber
U ID ataD etecto rT y p e L in k
U ID a ta D e te c to rT y p e A d d re ss
U ID a ta D e te c to rT y p e C a le n d a rE v e n t
U ID ataD etecto rT y p eN one
U ID a ta D e te c to rT y p e A ll
};
=
=
*
=
=
1 <<
0,
1
1,
1
2
1 <<
3,
0,
N S U IntegerM ax
unsigned char,
8--
. .
NSTextCheckingTypePhoneNumber
u in t64_ t 6 4 - .
, 6 4 -
. ( :
; .) .
O b j e c t iv e - C ,
NSString
. , .
?
O bjective-C. , ,
PostgreSQL.
,
NSString.
char
. .
, . , ,
A S C I I ( A m e r ic a n S ta n d a rd Cod e for Information
Interchange). A S C I I .
, 0x 4 b .
y o strin g .
A S C I I .
#include <stdio.h>
int nain (int argc, const char * argv[])
>
)
X+*J
return 0;
main.c:
286
34
: 256
94 . ? t N
, ASCII
. ,
( ). , 7 ^
ASCII . 0-31 ASCll ^**
: 32 . 127 &^
. . 128-255? ASCll iw^
7 6irroB. 128 ASCII- .
ASCII , &*
. :
int main (int argc, const char * argv[])
{
char x = ' ! j / / ' ! '
while (x <= '~') { / / '~'
printf("%x is %c\n''j x, x)j
x++;
>
return 0:
.
, \. \n
.
:
34.1.
\n
\t
40
- (0x00)
cnar*
287
char*
, *
. 0 x 0 0 * ' '* '
0x4c
0x6f
'L '
'0 '
0x00
0x76 0x65
'V*
. 34.1. Love
, ,
. ,
s tr le n ( )
strlen()
# in c lu d e < s t d i o . h >
/ / For p r in tf
#include <stdlib.h> // For m alloc/free
#include <string.h> // For s t r le n
i n t main ( i n t a r g c , c o n s t c h a r * a r g v [ ] )
T he c h a r a c t e r *!*
'~ '
>
// 5
char * sta rt = m a llo c(5 );
// 'L '
*start ' L ' ;
// 'o '
&
* ( s t a r t + 4) = '\ 0 ';
//
p rin tf("% s has %zu c h a ra c te rs \ n " j
s ta rt,
s t r le n ( s t a r t ) ) ;
//
p r in t f ( " T h e t h ir d l e t t e r i s %c\n", * ( s t a r t + 2 ) );
//
fre e (sta rt);
s t a r t = NULL;
r e tu rn 0;
.
.
s ta r t char *. char .
s ta r t+ l , 1
s ta r t; sta r t+ 2 2 . .
start
L
. 34.2.
, :
s t a r t [ 2 ] *^ : + 2). :
char * s ta r t = m alloc(5);
s ta r t[0 ] ' L ' ;
s t a r t [ l ] = 'o* i
start[2] ' v ' ;
s ta r t[3 ] * ' e ' ;
start NULL;
>
return 0;
------------ ">^HPiibi
289
,
, :
i n t m ain ( i n t a r g c , c o n s t c h a r * a r g v [ ] )
/ / ,
/ / f l o a t
f l o a t * f a v o r i t e s = ttia llo c (3 * s i z e o f ( f l o a t ) ) ;
/ /
fa v o rites[0 ] = 3.14158;
f a v o r ite s [l] = 2.71828;
fa v o rites[2 ] = 1.41421;
%.
*k
^
.
/ /
f o r ( i n t i = 0 ; i < 3 ; i+ + ) {
p r i n t f ( " % . 4 f i s f a v o r i t e % d \n " , f a v o r i t e s [ i ] , i ) ;
>
/ /
fre e (fa v o rite s );
f a v o r i t e s = NULL;
re tu rn 0 ;
, fa
vorites f l o a t *. flo a t 4 . ,
fa v o r ite s + l 4 OTHomeHfflOKfavorites.
,
malloc .
( -),
. ,
:
int main (in t argc, const char * argv[])
&
.
malloc . ,
, .
:
.
:
char * sta rt = "Love";
start[2] = 'z';
printf("Xs has %zu characters\n", s ta r t, str le n (sta r t));
o6
EXC_BAD_ACCESS. ,
.
, const ,
, . :
const char *start = "Love";
sta r t[2 ] = 'z ';
printf("%s has %zu characters\n", s ta r t, str le n (sta r t));
.
(s ta r t[2 ] = ' z ' ;), .
. :
const char *start = "A backslash a fter two newlines and
a ta b :\n \n \t\\" ;
printf("%s has %zu characters\n", sta r t, strlen (sta rt));
printf("The third le tte r is \'% c\'\n", sta r t[2 ]);
return 0;
)
.
NSString
Objective-C,
NSString . NSString
:
char *greeting "Hello!";
NSString *x = [NSString stringWithCString:greeting
encoding:NSUTF8StringEncoding];
NSString.
, NSString
, .
, :
NSString *greeting = "Hello!";
const char *x =NULL;
if ([greeting canBeConvertedToEncoding:NSUTF8StringEncoding]) {
x = [greeting cStringUsingEncoding:NSUTF8StringEncoding];
}
;
. ,
, autorelease;
, ,
malloc().
spaceCount() (ASCII
0x20) . :
#include <stdio.h>
int main (int argc, const char * argv[])
{
const char * sentence * "He was n o t in th e cab at the time.";
printf("\"% s\" has %
d s p a c e s \ n " , se n te n c e , spaceCount(sentence)),
>
return 0;
. ,
,
.
, .
,
,
.
g ra d eIn T h eS h ad e.
main.c:
#include <stdio.h>
#include <stdlib.h> // m alloc(), free()
flo a t averageFloats(float *data, in t dataCount)
flo a t sum = 0 . 0 ;
fo r (in t i = 0; i < dataCount; i++) {
sum = sum + d ata[i];
>
}
in t main ( in t argc, const char * argv[])
// flo a t
f lo a t *gradeBook malloc(3 * s iz e o f( flo a t ) ) ;
gradeBook[0] 60.2;
gradeBook[i] 94.5;
gradeBook[2] 81.1;
//
flo a t average = averageFloats(gradeBook, 3).
*93
//
free(gradeBook);
gradeBook = NULL;
printf("Average = %.2f\n", average);
return 0 ;
}
.
. 35.1. float
m alloc () ,
, .
( ),
? , .
main.c\
import <stdio.h>
float averageFloats(float *data, in t dataCount)
{
float sum .;
for (int i s 0 ; i < dataCount; i++) {
sum s sum + data[i];
)
return sum / dataCount;
294
35
flo a t gradeBook[3];
gradeBook[0] = 60.2;
gradeBook[l] = 94.5;
gradeBook[2] = 81.1;
/ /
flo a t average = averageFloats(gradeBook, 3);
/ / !
/ /
/ /
}
.
.
.
gradeBook:
in t main (in t argc, const char *argv[])
{
f lo a t gradeBook[] = {60.2, 9 4 .5 , 81.1};
flo a t average = averageFloats(gradeBook, 3);
printf(*'Average = %.2f, average);
return 0;
}
.
: , gradeBook 3, ;
.
, *. ,
a v e r a g e F l o a ts ( ) :
flo a t averageFloats(float d ata[], in t dataCount)
>
>
.
m a i n ( ) ,
:
i n t m a in ( i n t a r g c , c o n s t c h a r * a r g v [ ] )
{
, argv - ; argc
. ?
.
, ,
T e r t n in a l- ,
(shell). : csh, sh, zsh ksh,
Mac bash. bash
,
. argv main().
J _
____*
296
36
#include <stdio.h>
in t main (in t argc, const char * argv[])
>
return 0;
>
bash, :
$ Affirmation Aaron 4
iMSi& ct
Q Affirmtftat - main.m
Flnlshtd rvnning Armition
.tfMJLJI
Affirmatiofl
; A fftrm M ion
B__11 u ^ n , *
Scftinw
..
Affirm | _ *
B u ttd
p^WWW^^W^^W^WW\^^WJJ^
l *
.,_, Suppo
Base bpwihM is On I
>frw4wd|
P ro d u c t*
j . lAji, T t l
| i * m Oetwg
fro tte Afllrm*tion
^* R**e*t*
A<firm*Mon
ffv.iMiv<Mtttep* *,,0,) vritt **<.
,^1|^^^^^^8^$^8|88$^
.........
Aaron
1 1 IiBggsB;'4i^:^:.w.^
*
:' S.<
$ ^^^^ ^^ 1 ^ <^8^'
**An*brw
Dtb*m
* ArcMhM
I--W
MW^**
W~v-.'}.~...l.-..-..-. J'.. .t>l-.-...teV.. ... . .' .|..-.v-- .-...,..
Environment VWMMii
!Nimt
^^^^^^^^^^^^^^^^^^*^1*
ime>
I0l allo
!Vatuc
^Atemt4^
!,,
1
!
-,
i M
.,,.,:..,;
^^^^^.^^
I
vj H
C~ Qupllc*t> 5ehm
) (
01* * * ,
. 36.1.
n0lB#-
n$w
. Product Edit Schef^
297
Run AfFirmat\on
A rg u m e n ts . Arguments pL*O n
U u n c n + : .
OK, .
argv .
argv[0]:
arg
0 = /Users/aaron/Library/Developer/Xcode/DerivedData/
Affirmation-enkfqsgavfsproeggoxwbrmcowvn/Build/Products/Debug/
Affirm ation
arg i = Aaron
arg 2 = 4
argv[0] .
3yV
______ ^ ---"Build/Products/Debug/Affirmation"
____
0
**"Aaron"
argc = 3
^^~^
, ,
. mmnm.
#include <stdio.h>
#include <stdlib.h> // a to i()
int main (int argc, const char * argv[])
{
if (argc != 3) {
fprintf(stderr, "Usage: A ffirm atio n <name> <number>\n");
return 1;
>
int count * atoi(argv[ 2 ]);
for (int j * 0 ; j < count; j++) {
printf("Xs is cool.\n", a rg v [l]);
return 0 ;
switch
,
. if-else
:
in t yeastType = . . . ;
i f (yeastType == 1) {
makeBread();
} else i f (yeastType == 2) {
makeBeer();
} else i f (yeastType == 3) {
makeWine();
} else {
makeFuel();
>
switch.
:
in t yeastType = . . . ;
switch (yeastType) {
case 1:
makeBread();
break;
case 2:
makeBeer();
break;
case 3:
makeWine();
break;
default:
makeFuel();
break;
>
swircn
break.
c a s e
c a s e . , switch
:
in t yeastType = 2;
switch (yeastType) {
case 1:
makeBread();
case 2:
m akeB eer();
c a se 3:
makeWine();
d e fa u lt:
makeFuel();
}
,
iO S M a c O S X .
. ,
, .
, ,
. .
, Apple
O b j e c t iv e - C , .
, :
O b je c tiv e -C , . .
iO S ,
iO S P r o g r a m m in g : T h e B ig N e r d R a n c h G u id e . .
iO S , .
M ac OS X,
P r o g r a m m in g fo r M a c O S X
, .
,
.
iO S .
.
.
T w itter, B ig N erd R a n ch .^ ar
H ille g a s s
301
,
-
.
www.bignerdranch.com.
,
: , . ,
.
Objective-C. iOS MacOS
E.
i\
.
.
. A(tyt*<it'KrtJi
R
Ptx)uoH
o=HKT-neTeF*Byprcw=CT
-SRLD.ru
8 (812)336-3739
: Objective-C. A p p le
ISBN: 978-5-459-01567-6
' : / :
^'
:
197198, -, / 127
.: (812) 703-73-74, postbook 9 plttr.oorn
9 " 7 8 5 4 5 9 01 5 6 7 6
=*
d
BiQ
n e rD
www.plter.com -