Datn an Thi Hong k50 Cnpm

Embed Size (px)

Citation preview

PHIU GIAO NHIM V N TT NGHIP1. Thng tin v sinh vin H v tn sinh vin: .An Th Hng in thoi lin lc: 0984393387 Lp: CNPM Email: [email protected] H o to: i hc chnh quy

n tt nghip c thc hin ti: i hc Bch Khoa H Ni Thi gian lm ATN: T ngy 28 /02/2010 n 28/05 /2010

2. Mc ch ni dung ca ATN - Tm hiu mi trng lp trnh trn in thoi iPhone - Tm hiu m hnh cng thng tin tm kim trc tuyn trn in thoi di ng - Xy dng ng dng h tr ngi dng trn in thoi (thnh phn client) 3. Cc nhim v c th ca ATN T cc mc ch ni dung, cc nhim v c th ca n s thc hin - Tm hiu v lp trnh trn in thoi di ng - Tm hiu v iPhone - Tm hiu cng c, ngn ng, nn tng lp trnh cho in thoi iPhone - Tm hiu lp trnh mng, multithreading, media cho iPhone - Tm hiu m hnh h thng Mobile Portal - Xy dng ng dng tm kim a phng tin trn in thoi iPhone

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

1

4. Li cam oan ca sinh vin: Ti - An Th Hng - cam kt ATN l cng trnh nghin cu ca bn thn ti di s hng dn ca Thc s Lng Mnh B. Cc kt qu nu trong ATN l trung thc, khng phi l sao chp ton vn ca bt k cng trnh no khc.

H Ni, ngy 24 thng 05 nm 2010 Tc gi ATN

An Th Hng 5. Xc nhn ca gio vin hng dn v mc hon thnh ca ATN v cho php bo v:

H Ni, ngy thng nm Gio vin hng dn

Ths Lng Mnh B

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

2

TM TT NI DUNG N TT NGHIPNhn thc c nhu cu tm kim thng tin trn di ng, h thng cng thng tin di ng Mobile Portal ra i v bt u i vo hot ng. Mobile Portal s dng cng ngh tm kim ca my tm kim Socbay (trang ch www.socbay.com) c pht trin bi Cng ty C phn dch v cng ngh thng tin Naiscorp vi kh nng em li cho ngi dng nhng thng tin c sng lc, la chn v chun ha ring cho thit b di ng. Trng tm ca n xin trnh by thnh phn client ca h thng Mobile Portal - ng dng Petto c pht trin trn nn tng iPhone. Cc phn chnh ca bo co: Phn 1: Nn tng cng ngh Chng 1: Tm hiu v mi trng lp trnh trn di ng, tng quan v lp trnh iPhone. Gii thiu ngn ng, cng c lp trnh. Tm hiu lp trnh mng, mutithread, core audio. Chng 2: a ra m hnh tng quan v cng thng tin tm kim trc tuyn. T a ra ng dng m n xy dng l xy dng ng dng tm kim a phng tin trn in thoi iPhone thnh phn ng vai tr client trong m hnh. Phn 2: Xy dng chng trnh Chng 3: Gii thiu cc loi ng dng trn iPhone, pht biu bi ton cn gii quyt. Chng 4: Xy dng cc dch v tm kim a phng tin. Phn tch, thit k ng dng.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

3

MC LCPHIU GIAO NHIM V N TT NGHIP..............................................1 TM TT NI DUNG N TT NGHIP ......................................................................................................................3 DANH MC HNH...................................................................................7 DANH MC BNG...................................................................................8 LI NI U..........................................................................................9 PHN I: NN TNG CNG NGH............................................................10 CHNG 1: TM HIU MI TRNG LP TRNH TRN IPHONE...........................10 1.1 Tng quan v lp trnh trn di ng.........................................................101.1.1 Th trng lp trnh trn di ng.................................................................... 10 1.1.2. Nhng kh khn khi lp trnh cho di ng.....................................................11

1.2 Tng quan v lp trnh iPhone.................................................................121.2.1 Gii thiu v iPhone....................................................................................... 12 1. Cuc cch mng v cng ngh trn in thoi di ng mang tn iPhone.......12 2. Gii hn ca iPhone........................................................................................ 14 1.2.2 Cc nn tng pht trin di ng ha hn trong nm 2010 ............................14 1.2.3. Mi trng lp trnh iPhone........................................................................... 16 1.2.4. iPhone SDK:................................................................................................. 16 1. Phn tch mt ng dng:................................................................................ 16 2. Ci t iPhone SDK:........................................................................................ 20 3. iPhone Simulator:........................................................................................... 22 1.2.5 Xcode............................................................................................................ 23 1.M hnh MVC ( Model - View - Controller).........................................................23 2. Cc template thng dng............................................................................. 24 3. S b tr ca mt project trong Xcode............................................................ 24 1.2.6 Interface Builder............................................................................................ 26 1. M Interface Builder:...................................................................................... 26 2. To file Interface Builder................................................................................ 26 3. Ca s ti liu............................................................................................... 28

1.3 Cng c lp trnh......................................................................................321.3.1 Ngn ng Objective-C.................................................................................... 32 1. Lch s ca ngn ng Objective-C.................................................................. 32 2. Lp, i tng v thng ip.......................................................................... 33 3. nh ngha mt lp......................................................................................... 37 1.3.4 Lp trnh mng.............................................................................................. 43 1. Tng quan:..................................................................................................... 43 2. Lp trnh mng vi CFNetwork....................................................................... 44 1.3.5 MultiThreading............................................................................................... 54 1. V lp trnh thread......................................................................................... 54 2. Qun l thread............................................................................................... 60 3. Run loop........................................................................................................ 66 1.3.6. Core Audio.................................................................................................... 70 1. Core Audio l g?............................................................................................ 70 2. C bn v Core Audio..................................................................................... 72

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

4

CHNG 2: TNG QUAN V H THNG TM KIM MOBILE PORTAL...................78 2.1 H thng Mobile Portal.............................................................................78 2.2 My tm kim Socbay (Socbay Search Engine).........................................792.3.1. Thu thp d liu cho cc dch v................................................................... 80 2.3.2 Phn tch truy vn ngn da trn thi quen ngi dng................................81

2.4 Tng giao din di ng (Mobile Interface)................................................812.4.1 Qu trnh chun ha d liu cho thit b di ng:...........................................82 2.4.2 Thit k module kt ni ti client v server...................................................83

2.5 ng dng Petto........................................................................................83 PHN II: XY DNG CHNG TRNH......................................................84 CHNG 3: NG DNG TRN IPHONE...............................................................84 3.1 Cc loi ng dng trn iPhone.................................................................84 3.2 Pht biu bi ton....................................................................................84 CHNG 4: XY DNG CC DCH V TM KIM A PHNG TIN DA TRN MY TM KIM SOCBAY..................................................................................................86 4.1 Xc nh yu cu h thng:.....................................................................86 4.2 c t user case:.....................................................................................874.2.1. 4.2.2. 4.2.3. 4.2.4. 4.2.5. 4.2.6. Tin tc.......................................................................................................... 87 c truyn.................................................................................................... 88 a im....................................................................................................... 89 Cm nang t vn.......................................................................................... 90 Hnh nh....................................................................................................... 91 Nhc MP3...................................................................................................... 92

4.3 Cc vn k thut, thut ton...............................................................934.3.1. Vic kt ni, truyn nhn d liu gia client v server:.................................93 4.3.2. Hin th ........................................................................................................ 94 4.3.3. MP3 streaming.............................................................................................. 94

4.4 Thit k giao din:...................................................................................964.4.1. 4.4.2. 4.4.3. 4.4.4. 4.4.5. 4.4.6. 4.4.7. Giao din chnh:............................................................................................ 96 Dch v Tin Tc:............................................................................................ 97 Dch v Truyn:............................................................................................ 97 Dch v a im:......................................................................................... 98 Dch v Cm Nang T Vn:........................................................................... 98 Dch v Hnh nh:......................................................................................... 99 Dch v Nhc MP3:........................................................................................ 99

4.5 Thit k lp:...........................................................................................1004.5.1. Tng Cocoa Touch Application................................................................... 100 1. Lp ng dng:..............................................................................................100 2. Dch v Tin Tc:............................................................................................ 102 3. Dch v nhc MP3......................................................................................... 104 4.5.2. Tng Mobile Interface:................................................................................105 4.5.3. Quan h gia tng Mobile Interface v Cocoa Touch Application:...............106

TNG KT NH GI..........................................................................107 1. Mt s kt qu t c...........................................................................107 2 Nhc im...............................................................................................107 3 Hng pht trin:......................................................................................108 TI LIU THAM KHO.........................................................................109

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

5

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

6

DANH MC HNHHNH 1.1 CC NN TNG LP TRNH DI NG........................................11 HNH 1.2 APPLE DEV CENTER................................................................21 HNH 1.3 XCODE - NEW PROJECT ..........................................................23 HNH 1.4 XCODE EDITOR.....................................................................25 HNH 1.5 INTERFACE BUILDER - NEW FILE.............................................27 HNH 1.6. CA S TI LIU INTERFACE BUILDER....................................29 HNH 1.7 CA S TH VIN INTERFACE BUILDER...................................30 HNH 1.8 CA S THUC TNH INTERFACE BUILDER...............................31 HNH 1.9 BNG KT NI CA INTERFACE BUILDER.................................32 HNH 1.10 CU TRC FILE GIAO DIN CA MT LP...............................39 HNH 1.11 CU TRC FILE THC THI CA MT LP................................40 HNH 1.12 CFNETWORK V CC LP PHN MM KHC TRONG MAC OS X 45 HNH 1.13 CU TRC CFSTREAM API.....................................................47 HNH 1.14 CU TRC V NGUN CA RUNLOOP....................................67 HNH 1.15 KIN TRC CORE AUDIO CA MAC OS X.................................71 HNH 1.16. KIN TRC CORE AUDIO CA H IU HNH IPHONE............72 HNH 1.17 BA LP API CA CORE AUDIO...............................................73 HNH 1.18 CU TRC CORE AUDIO CA H IU HNH IPHONE..............74 HNH 2.1 M HNH H THNG MOBILE PORTAL......................................78 HNH 2.1 M HNH N GIN CA SOCBAY SEARCH ENGINE..................80 HNH 4.1 USERCASE TNG TH CA H THNG.....................................86 HNH 4.2 MP3 STREAMING....................................................................95 HNH 4.3 GIAO DIN CHNH CA NG DNG..........................................96 HNH 4.4 GIAO DIN CHNH CA DCH V TIN TC.................................97 HNH 4.5 GIAO DIN CHNH CA DCH V TRUYN.................................97 HNH 4.6 GIAO DIN CHNH CA A IM.............................................98 HNH 4.7 GIAO DIN CHNH CA DCH V CM NANG T VN.................98 HNH 4.8 GIAO DIN CHNH CA DCH V HNH NH..............................99 HNH 4.9 GIAO DIN CHNH CA DCH V NHC MP3.............................99 HNH 4.10 BIU LP CA TNG NG DNG COCOA TOUCH..............100

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

7

HNH 4.11 BIU LP CA LP NG DNG.......................................101 HNH 4.12 BIU LP CA DCH V TIN TC....................................102 HNH 4.13 BIU LP CA DCH V NHC MP3.................................104 HNH 4.14 BIU LP CA TNG MOBILE INTERFACE........................105

DANH MC BNGBNG 1.1 CC TEMPLATE NG DNG THNG DNG.............................24 BNG 1.2 CC TEMPLATE CA INTERFACE BUILDER...............................28 BNG 1.3 CC PHNG THC QUN L B NH CA OBJECTIVE-C.........41 BNG 1.4 PROPERTY ATTRIBUTE...........................................................42 BNG 1.5 CC CNG NGH C TH S DNG THAY TH THREAD TRONG NG DNG....................................................................................................57 BNG 1.6 CC LOI THREAD.................................................................57 BNG 1.7 GIAO TIP GIA CC THREAD.................................................60 BNG 1.8 CHI PH S DNG THREAD.....................................................62 BNG 1.9 CU HNH THREAD................................................................64 BNG 1.10 CC CH RUN LOOP.......................................................68 BNG 2.1 CC DCH V........................................................................81 BNG 4.2 C T USERCASE DCH V TIN TC......................................88 BNG 4.3 C T USERCASE DCH V TRUYN......................................89 BNG 4.4 C T USERCASE DCH V A IM....................................90 BNG 4.5 C T USERCASE DCH V CM NANG T VN......................91 BNG 4.6 C T USERCASE DCH V HNH NH...................................92 BNG 4.7 C T USERCASE DCH V NHC MP3..................................93

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

8

LI NI U n tt nghip ny c hon thnh sau mt thi tm hiu, xy dng ti Cng ty C phn dch v cng ngh thng tin Naiscorp. Ngoi s c gng v n lc ca bn thn, cn c s gip ca nhiu ngi em c th hon thnh c n nh ngy nay. Trc ht, em xin c gi li cm n su sc n ThS Lng Mnh B - B mn Cng ngh phn mm, Vin Cng ngh Thng tin v Truyn thng, trng i hc Bch Khoa H Ni ht lng gip , nh hng v ch dy tn tnh gip em vt qua nhng kh khn trong qu trnh em lm n tt nghip. Em xin c gi li cm n ti cc thy c gio trong trng i hc Bch Khoa H Ni ni chung v cc thy c trong vin Cng ngh Thng tin v Truyn thng, B mn Cng ngh phn mm ni ring tn tnh ging dy, truyn t cho em nhng kin thc, nhng kinh nghim qu bu trong sut 5 nm hc tp v rn luyn ti trng i hc Bch Khoa H Ni. Ngoi ra, em cng xin gi li cm n n anh Nguyn Xun Ti, anh Mai nh Thng v cc anh ch em cng ty Naiscorp to iu kin em c th hon thnh sn phm v cng l n ca mnh. An Th Hng

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

9

PHN I: NN TNG CNG NGHCHNG 1: TM HIU MI TRNG LP TRNH TRN IPHONE 1.1 Tng quan v lp trnh trn di ng1.1.1 Th trng lp trnh trn di ng S lng thit b di ng ngy cng tng Vit Nam, nhiu ngi coi in thai di ng nh mt vt khng th thiu trong cuc sng hng ngy. Cng vi s pht trin mnh m ca cng ngh thng tin trong thi i mi, ngi s dng di ng bt u hng ti nhng nhu cu cao cp hn. Khng ch nghe-gi, nhn tin m gi y h cn mun s hu mt chic in thoi c kh nng truy cp mng v thc hin mi ng dng nh mt chic my tnh b ti. c th thc hin c cc tnh nng cao cp nh c bo, tiu thuyt, tra t in, bn v nht l th gii gii tr vi ca nhc, xem phim, chi game th ngoi nn tng phn cng do nh sn xut in thoi cung cp cn cn phi c cc phn mm chuyn dng ci t trn di ng thc hin cc chc nng trn. Tuy nhin, th trng di ng l mt th trng rt si ng vi loi thit b di ng ca cc nh sn xut c kiu dng, tnh nng, tc x l, b nh trong, mn hnh giao din. khc nhau. V cng v c nhiu nh sn xut m li khng c mt chun cng ngh (v mt phn mm) no c p dng chung cho tt c cc my in thoi di ng nn cng vic lp trnh cho in thoi di ng ng l mt bi ton kh cho cc lp trnh vin. Vic la chn mt nn tng pht trin cho in thoi di ng cng l mt vn nan gii. Hin nay c th k tn cc nn tng di ng ph bin: iPhone, Window Mobile, Android, J2ME, Symbian. Nhn vo hnh di y c th thy c phn no s phong ph ca th trng ny.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

10

Hnh 1.1 Cc nn tng lp trnh di ng

1.1.2. Nhng kh khn khi lp trnh cho di ng So vi chic my tnh bn hay laptop, ch vi b nh trong vi GB, RAM cao nht l 256 MB, b nh ca chic in thoi di ng qu l qu nh. Hn na, mt phn b nh ny li c s dng chy h iu hnh, x l ha Do khi vit ng dng, lp trnh vin phi ch nhiu n b nh. C th ni rng lp trnh cho di ng ging nh vic y cc lp trnh vin v vi thi k u ca lp trnh cho my tnh c nhn, phi tit kim tng KB b nh mt nu khng mun xy ra tnh trng trn b nh. Ngi s dng ng dng trn di ng i hi tc phi nhanh, v nh m mt game, ngi ta khng th ngi ch c chc pht game load xong. Do , qu trnh ng, m ng dng phi din ra nhanh chng. Hn na, d c thng minh n my, nhiu chc nng n my, chic in thoi di ng cng phi l chic in thoi trc . Vy khi ang chy ng dng, bt thnh lnh c mt tin nhn hay mt cuc gi Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 11

n th sao? ng dng phi c ng tm thi mt cch nhanh chng, lu tr li trng thi trc khi ng, cho ngi dng nhn tin nhn, cuc gi (nu ngi dng la chn nhn), sau li cho php ngi dng tr li ng dng vi trng thi trc . Sc hp dn ca Internet l khng th chi ci. Ngi dng mun truy cp internet mi lc mi ni, ngi lp trnh th mun to ra cc ng dng c kh nng khai thc ngun ti nguyn v tn ca internet. Tuy nhin khng phi thit b di ng no cng c kh nng truy nhp internet. V vy, cn phi hiu v cc dch v phn cng ca thit b h tr. T tng code mt ch, dng mi ni kh m p dng c cho lnh vc lp trnh di ng. V d nh vi cc dng my cho php ci t cc ng dng vit bng ngn ng Java. V l thuyt, chng trnh Java c xy dng xong c th em i mi ni c my o Java chy. Nhng cc thit b di ng ca cc hng khc nhau li c b nh cng vi tc x l khc nhau, phi hiu r s khc nhau ny th mi c th iu chnh cho ng dng c th chy trn cc dng my khc nhau. Hn na, mn hnh hin th ca cc thit b di ng cng trm hoa ua n vi kch thc, phn gii mn hnh khng theo mt chun nht nh nn chc chc s khng ra kt qu nh mong mun khi ci t cng mt ng dng ln cc thit b khc nhau m khng c s sa i hin th u ra cho ph hp. Mt khc, cc thit b di ng cng tip nhn tng tc ca ngi dng rt khc nhau: qua bn phm, chut, bt, cm ng nn lp trnh vin cng cn phi lu n iu ny. Mn hnh ca cc thit b di ng rt b so vi my tnh bn hay my tnh xch tay nn cc ng dng cng khng th c giao din qu phc tp bi nh th s lm ri mt ngi s dng.

1.2 Tng quan v lp trnh iPhone1.2.1 Gii thiu v iPhone 1. Cuc cch mng v cng ngh trn in thoi di ng mang tn iPhone Thng 6 nm 2007, chic iPhone th h u tin ra mt v m u cho cn st iPhone trn ton th gii. Khng h danh l cng ty lun i u v cng ngh, Apple to ra thay i mang tnh cch mng vi chic in thoi di ng khi gii thiu mt giao din ngi dng hon ton mi trn nn tng mn hnh cm ng a im v phn mm mi c tnh tin phong. H iu hnh ca iPhone gip ngi dng c th iu khin chic in thoi ca h ch bng mt thao tc nhn, gy hoc chm tay. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 12

n nm 2008, Apple li cho ra mt iPhone 3G cng vi App Store - mt ca hng cc ng dng cho iPhone. iPhone c mn hnh cm ng a im, bn phm o hon ton thay th bn phm tht v c mt gia tc k bn trong. Mn hnh cm ng a im tn dng xc gic t nhin ca khch hng m khng thng qua bt stylus. Cc thao tc trn my c thc hin d dng ch bng cch t ngn tay ln mn hnh nhn, ko, th iPhone loi b hon ton s xut hin ca bn phm tht, thay vo l bn phm thng minh hot ng trn c s phn mm. Bn phm o ny cho php ngi dng chuyn i qua li gia 40 dng bn phm quc t v c phn mm nhn dng k t cho php ngi dng vit cc k t Trung Hoa bng ngn tay ri nhn chn kt qu thch hp. iPhone phn ng vi cc chuyn ng bng mt gia tc k lp bn trong. Khi ngi dng quay iPhone t phng ng sang phng ngang, gia tc k pht hin ra chuyn ng ny v thay i mn hnh, cho xem ton b chiu rng ca trang web, hnh nh, tin nhn, hoc bn ghi ch gia tc k cng c s dng kim sot vic chi game hay o ngc hnh ng trc (nh lnh Shake to Undo). Vi iPhone 3GS, ngi dng c th t iu chnh v sp xp cc biu tng trn mn hnh Ch (Home screen), k c cc biu tng trn Thanh Cng C theo mun ca mnh. iPhone phn tch cc c g ngh cc t m ngi dng g vo, v hc c nhng t ngi dng thng hay g nht k c tn ring v thng tin trong s lin lc (contact list) ca h. Nhn v gi nt Home m ch Voice Control (iu Khin Bng Khu Lnh), ri c vo tn hay s in thoi ca mt ngi lin lc gi in. iPhone cng m nhc v to ra cc danh mc m (playlist), bng cch ch vic dng khu lnh. y l mt trong cc tnh nng mi c thm vo sau ny ca iPhone iPhone 3GS c chun ha bng cc tnh nng tip cn s dng (accessibility) h tr cho ngi khuyt tt. iPhone cung cp cc d liu v tr tm n cc ng dng ci t sn v Ca Hng ng Dng (App Store). Khi chp nh bng camera iPhone c th gn th a l (geotag), ghi cc thng tin v a im GPS (H Thng nh V Ton Cu) cho n. Nh vy, khi ngi dng chia s hnh nh trn mng, bn b v gia nh c th bit c a im ca hnh chp. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 13

2. Gii hn ca iPhone B nh v tc x l: Mc d Apple khng tit l thng tin v tc s l v b nh nhng hacker Craig Hockenberry trn trang furborg.org nh gi iPhone c tc x l tm 600 MHz v 128MB b nh vt l. B nh v tc x l ny qu gii hn so vi cc my tnh c nhn hin nay hin nay. Mn hnh nh: mn hnh ca iPhone c phn gii 480 x 320 pixel. Khng c nhiu khng gian lm vic cng. Kch thc mn hnh nh cng dn ti vic ch c duy nht 1 ca s c th hin th ti mt thi im. Bo mt: ch c th c v ghi vo th mc l mt phn ca gi ng dng. Vng c th truy nhp trong mt ng dng c gi l sandbox. Khng th c file c to bi ng dng khc. Khng th ghi vo bt c ni no ngoi sandbox ca ng dng. ng dng c vng i ngn: cc ng dng iPhone khng th thng tr trong b nh. Cc ng dng thng tr trong b nh l ng dng c th chy n trong khi ngi dng chy ng dng khc. iPhone ch cho php 1 chng trnh chy ti mt thi im o cn lu ti cc trng hp nh ang chy ng dng th c tin nhn, in thoi Tuy nhin, hn ch ny s sm c khc phc khi Apple ang d kin cho ra mt iPhone 4.0 vi h iu hnh a nhim trong nm nay. T qun l b nh do iPhone khng c b gom rc (garbage collection). 1.2.2 Cc nn tng pht trin di ng ha hn trong nm 2010 Nm 2010 s nh du mt nm y si ng vi s ra mt ca iPhone 4.0, cc nn tng Symbian, Windows Phone v BlackBerry mi. Smartphone ngy mt chim th phn ln trn tng s in thoi di ng bn ra, song song, cuc chin gia cc nn tng ngy mt nng bng hn. Palm OS, Windows Mobile, Symbian c mt qu kh thnh cng, tuy nhin vic chm thay i, lm cho iPhone, Android thay i cc din khi lin tc gia tng th phn trong hai nm gn y. Cha bao gi, lng di ng li c nhiu h iu hnh cho smartphone nh hin ti. Nokia sau khi s hu Symbian, tip tc pht trin Maemo v gn y l kt hp vi Intel xy dng thnh MeeGo. Palm sau khi v tay HP, ang c k hoch nng cp webOS ln phin bn mi, ngoi ra Android cng sp c Google nng cp bn 2.2. Di y l 5 nn tng di ng c cc nh sn xut thng bo chnh thc, v s c mt trn th trng trong thi gian ti. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 14

iPhone 4.0 C th ni iPhone 4.0 l nn tng c mong ch nht hin nay, cng vi h iu hnh ny, mt phin bn di ng th h th t ca Apple gn nh chc chn s c mt vo thng 6 ti. So vi cc phin bn trc, iPhone OS 4.0 c th chy a nhim, thay i c coi l ng k nht. S thnh cng ca iPhone khng ch bi nn tng c giao din n gin, nhng chic di ng thit k p, m Apple xy dng mt "h sinh thi" vi v s ng dng trong App Store. Nn tng mi s xut hin ma h nm nay v cho php ci t ln cc mu iPhone t 3G, 3GS v iPod Touch. Symbian^3 Symbian^3 l bn nng cp t S60 phin bn th 5, v c xem l nn tng tm thi, trc khi Nokia trnh lng Symbian^4. Nokia N8 l thit b u tin s dng h iu hnh ny. So vi S60, Symbian^3 khng c nhiu thay i t Menu, cch b tr mn hnh Home, cc biu tng. Tuy nhin, s khc bit l h iu hnh ny c thm 3 mn hnh Home, cho php trt v chuyn i cng cng ngh cm ng a im. N8 s ra mt vo qu III, model mnh m, cc tnh nng gii tr a phng tin, chp nh 12 Megapixel. Windows Phone 7 Windows Mobile l mt trong nhng nn tng khai sinh smartphone vi nhiu ng dng. Tuy nhin, s xut hin ca iPhone mang ti cho ngi dng nhng suy ngh mi, theo in thoi thng minh cn n gin, d dng, trong khi Windows Mobile ngc li, kh rc ri. Sau phin bn Windows Mobile 6.5 ra mt nm ngoi, thng 2 va ri, Microsoft gii thiu Windows Phone 7, h iu hnh s c mt trn di ng vo cui nm nay. Gn nh, Windows Phone khng c s k tha no so vi nn tng trc ca hng v giao din, tt c u c lm mi, t cc hub cha ng dng n cc b tr icon. Hin ti, HTC, LG, Acer... v nhiu thng hiu khc cam kt s ra mt di ng chy Windows Phone 7 vo cui nm. Microsoft cng ang tch cc pht trin gian ng dng Market Place v cng c cho cc lp trnh vin xy dng phn mm. BlackBerry 6 BlackBery OS 6 c RIM cng b ti s kin Wireless Enterprise Symposium (din ra t 27 n 29/4 ti M). RIM cha a ra chi tit v h iu hnh mi, ngoi Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 15

mt on video qung co kh n tng. Theo nhng thng tin u tin, nhiu ci tin t giao din, mn hnh Home mi, menu pop-up, kh nng chuyn dch, trnh duyt web mi da trn nn tng WebKit tng thch HTML5. Ngoi ra, BlackBerry OS 6 h tr kh nng iu khin trn mn hnh cm ng a im tt hn. Samsung Bada Samsung tng sn xut di ng chy Windows Mobile, Android... Bada l nn tng ca hng pht trin ring, vi giao din c nhiu ng nt ca TouchWiz. Bada dnh cho mn hnh cm ng, nhn mnh vo cc yu t nh gii tr, kt ni. Samsung Wave S8500 l model u tin chy nn tng ny, my s bn ra trong qu ny. Hin ti, Bada ang c Samsung hon thin, hng cng gii thiu cng c lp trnh, cc nh pht trin c th vit cc ng dng v giao din Flash, iu khin web, iu khin chuyn ng, nhn dng khun mt, thi tit... v cc ng dng nhp vai, tng tc. 1.2.3. Mi trng lp trnh iPhone H iu hnh: MacOS hoc OS X 10.5.* tr ln. Mi trng: iPhone SDK. iPhone SDK c th download min ph t trang http://developer.apple.com/iphone/. IDE: Xcode Ngn ng lp trnh: Ojective C 1.2.4. iPhone SDK: 1. Phn tch mt ng dng: H iu hnh OS X ca Apple l mt platform xy dng da trn nn tng UNIX nn k tha cc quy c c bn ca UNIX v file. Nhn vo bt k ng dng Mac no cng s thy rng phn m rng .app khng phi biu din mt file m l mt th mc. y l th mc ca ng dng. Trong l mt cu trc c t chc cha cc ti nguyn m ng dng cn cng nh cc thuc tnh mang thng tin v ng dng v file thc thi nh phn ca ng dng. iPhone SDK build file thc thi nh phn cho chng trnh v gi cc file n cn vo th mc chng trnh ny. Do vy, xy dng mt ng dng hon thin, cc file h tr cn c ci t phi c ch ra cho Xcode IDE. ng dng ch c thc thi Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 16

bn trong sandbox ca iPhone. Thut ng sandbox dng ch vng gii hn ngn khng c cc ng dng truy xut vo cc ti nguyn khng c cho php. Mt trong cc chc nng ca n l ngn chn bt k hot ng c hay ghi no bn ngoi th mc home c ch nh cho 1 ng dng. Tt c nhng g mt chng trnh cn chy phi c cha trong th mc home. Hn na, ng dng s khng bit c ni n c ci t m y s l nh danh duy nht c thm vo ng dn ca ng dng mi ln ci t. Mun tm ra ng dn ci t ch c cch duy nht l s dng cc hm nh l NSHomeDirectory hay lp nh l lp NSBundle. Mi ng dng iPhone c mt th mc home ring cha th mc Library v Documents, v th mc tmp cha cc file tm.Th mc chng trnh ca ng dng iPhone c cu trc n gin hn ca ng dng Mac cho my tnh bn, v tt c cc ti nguyn ca ng dng u c lu tr gc ca th mc chng trnh .app. V d mt th mc home hon chnh ca mt ng dng iPhone:drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drw-r--r-rw-r--r-rw-r--r-rw-r--r-rwxr-xr-x -rw-r--r-rw-r--r-rw-r--rdrwxr-xr-x mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile mobile Documents/ Library/ Preferences/ MyApp.app/ _CodeSignature Default.png icon.png Info.plist MyApp pie.png PkgInfo ResourceRules.plist tmp/

Danh sch ny phn nh mt ng dng iPhone rt c bn c tn MyApp: Documents: th mc c bit cha cc ti liu ca ng dng c to bi ngi dng. N khng chia s ti liu vi cc ng dng khc. Library: th mc cha cc thit lp (setting) v cc ti nguyn khc c to ra sau khi ci t. Th mc ny cn cha mt th mc con l Preferences cha cc u tin (preference) ca ng dng.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

17

MyApp.app: th mc ng dng biu din ng dng thc s. Th mc ny cha file nh phn thc thi v tt c cc ti nguyn h tr ng tin. _CodeSignature: th mc cha ch k cho mi file trong ng dng m bo rng ng dng khng b sa i t dng ban u ca n. Tt c ng dng phi c k mi c th chy trn iPhone. Default.png: file nh c hin th mn hnh khi ng dng bt u c m ra v gi cho n khi ng dng khi ng xong. y l mt file nh c kch thc 320 x 480 pixel. icon.png: nh i din cho ng dng hin th ln mn hnh home ca iPhone. Apple khuyn nn s dng mt biu tng c kch thc 57 x 57 pixel. File ny c th c tn ty thch min l n c ch r trong file Info.plist. Info.plist: danh sch cc thuc tnh cha thng tin v ng dng. Trong quan trng nht l tn file thc thi nh phn v mt nh danh gi ( bundle identifier), s c gi khi ng dng bt u m pie.png: mt nh c s dng lm v d. iPhone framework cung cp nhiu phng thc ly c ti nguyn v vy lp trnh vin khng cn truy xut trc tip cc ti nguyn ny thng qua ng dn. Xcode IDE s ly tt c cc file c trong th mc Resoure v t vo th mc chng trnh ca ng dng khi project c ci t. PkgInfo: file ny cha 8 byte m t loi file cho cho ng dng. Khi t xy dng ng dng khng cn s tr gip ca Xcode, pht trin vin cn phi to mt th mc khung .app cha ng dng. Khung .app cung cp tt c cc thng tin cn thit cho iPhone bit v s tn ti ca ng dng nh l mt gi, nn n c th c chy t mn hnh home ca iPhone. Nu xy dng ng dng bng Xcode, b khung ny s c Xcode sinh ra t ng. V d, sau khi bin dch mt ng dng c tn MyExample , Xcode to ra th mc ca MyExample bn trong th mc Build ca project v t file thc thi nh phn v ti nguyn ca n vo trong th mc ca ng dng. Nu lm bng tay th phi to ra th mc : $ mkdir MyExample.app

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

18

Sau , Xcode s sao chp danh sch thuc tnh vo th mc ng dng m t ng dng v cch thc n c m ra. File Info.plist biu din thng tin i dng XML: CFBundleDevelopmentRegion en CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile icon.png CFBundleIdentifier com.yourcompany.${PRODUCT_NAME:identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleResourceSpecification ResourceRules.plist CFBundleSignature ???? CFBundleVersion 1.0 LSRequiresIPhoneOS Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 19

Cc thuc tnh quan trng l CFBundleDisplayName, CFBundleExecutable, CFBundleIconFile, CFBundleIdentifier v CFBundleName. Thuc tnh CFBundleExecutable c bit quan trng v n ch ra tn ca file thc thi nh phn trong th mc ng dng. File ny s c thc thi khi ng dng c m ra. CFBundleIdentifier ch ra nh danh duy nht ca ng dng. Bt c khi no m ng dng, ng dng s c tham chiu ti s dng nh danh ny. Bi v nh danh ny l duy nht nn n thng c hp nht vi mt URL. Cc file icon.png v Default.png cng c sao chp vo th mc chng trnh. Tuy nhin nu file icon.png v Default.png khng tn ti hay khng c ch ra trong file Info.plist, iPhone s s dng hnh mc nh ca n. 2. Ci t iPhone SDK: iPhone cho php ngi dng c th download min ph iPhone SDK t trang http://developer.apple.com/iphone/. Tuy nhin, trc khi download cn phi ng k tr thnh mt ngi pht trin ng dng cho iPhone. ng k, truy nhp vo trang trn, tm ng link ti ch download bn SDK mi nht.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

20

Hnh 1.2 Apple Dev Center

Bm vo link, trang ng k s m ra vi 3 ty chn: - Min ph: s dng Apple ID ca mnh download SDK. Nu khng c Apple ID, c th bm vo nt Create Apple ID to v ng nhp vo. Khi ng nhp, ngi dng khng ch download c SDK m cn tm thy nhiu link hu ch cha ti liu, video, code mu pht trin ng dng trn iPhone.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

21

- Standard: vi gi 99$. N cung cp mt host cc cng c, ti nguyn, h tr k thut, phn phi ng dng qua App Store ca Apple v quan trng nht l kh nng kim tra v g li trn my iPhone thc s ch khng ch l trn simulator. - Enterprise: gi 299$ c thit k cho cc cng ty pht trin c quyn, cc ng dng cho iPhone v iPod touch trong nh v cho nhng ng dng pht trin cho App Store v c nhiu hn mt nh pht trin lm vic trong mt d n. Mt trong nhng phn t quan trng nht ca iPhone SDK l Xcode, mi trng pht trin tch hp ca Apple. Xcode gm cc cng c to, g li source code, bin dch ng dng v thc thi ng dng. Bn SDK min ph cng bao gm c simulator cho php ngi pht trin c th chy hu ht cc chng trnh iPhone trn my Mac. 3. iPhone Simulator: iPhone Simulator l gi lp ca iPhone cho php ngi dng trin khai v kim th cc ng dng iPhone trn my tnh bn. Simulator cung cp mi trng ging vi iPhone vi ty chn menu gi lp kha, xoay mn hnh Tuy nhin n cng c mt s gii hn nht nh do desktop khng c cc phn cng cn thit thc hin cc tc v . Mt s chc nng quan trng khng c trong simulator: Khng c API o gia tc Ch gii hn vi mt s c ch tng tc vi mn hnh cm ng, v khng h tr nhiu hn 2 ngn tng tc ln mn hnh cm ng. ng dng s khng nhn in thoi gi n. Khng th truy nhp mng EDGE/3G Khng c chc nng ghi hnh v ghi m. Ch c sn mt s ng dng ca iPhone: Contacts, Safari, Photos v Settings. Khng th thy tc ng ca ng dng ln CPU v b nh ca iPhone bi my desktop c nhiu ti nguyn hn chy ng dng. ha chm hay cc vn khc ch c th pht hin ra khi kim th trn my tht.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

22

1.2.5 Xcode Sau khi m Xcode, chn File/New Project. Mt ca s xut hin nhc ngi dng chn template cho project ca mnh. Bn di tiu iPhone OS, chn mc Application, pha bn phi s hin ra mt s template chn.

Hnh 1.3 Xcode - New Project

1.M hnh MVC ( Model - View - Controller) Phn mm pht trin trn iPhone phi tun theo m hnh MVC. Mc ch ca m hnh ny l tch ri phn nghip v (business logic) ra khi d liu v cc quy tc p dng ln d liu ny khi cc phn t giao din c hin th cho ngi dng thy. Model biu din d liu v nghip v (business logic) cho ng dng. View biu din cc phn t giao din hin th cho ngi dng v cho php ngi dng tng tc vi chng. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 23

Controller l cu ni gia Model v View. 2. Cc template thng dng

Template View - based application Navigation - based application Utility application OpenGL ES application Tab bar application

ng dng p dng vi nhng ng dng ch c mt view (cnh). Mt controller qun l view chnh ca ng dng. p dng vi nhng ng dng phi s dng nhiu view v cn mt navigation trung gian gia chng. p dng vi nhng ng dng s dng ti ha, 3D game. Cung cp mt controller c bit hin th mt nt bn di mn hnh. y l template thch hp cho cc ng dng kiu cho iPod hay l Mobile Phone. Framework c bn nht. p dng vi nhng ng dng khng thch hp vi bt k template no trn

Window-based application

Bng 1.1 Cc template ng dng thng dng 3. S b tr ca mt project trong Xcode Sau khi to mt project mi, mn hnh project s m ra:

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

24

Hnh 1.4 Xcode editor

Mt project ng gi ngun, framework v cc ti nguyn ca ng dng. Trong mt project bao gm: Classes: Cha cc lp Objective-C m ng dng cn s dng: i tng delegate, view controller, v cc i tng khc ngi dng to ra. Khi mun thm mt lp mi vo ng dng ca mnh, lp trnh vin s thm lp mi ca mnh vo y Other sources: cc ngun khc c bin dch vo ng dng. Mc nh, Other sources s cha cc header tin bin dch v hm main. Resources: Cc ti nguyn ca ng dng m khng c bin dch vo trong source code nhng c sao chp vo th mc chng trnh khi ng dng build ln. Cc ti nguyn ny bao gm: nh, m thanh, game level hay cc file quan trng khc. Frameworks: cha cc framework m ng dng c lin kt. Cc th vin ny c lin kt lc build. Products: build target cho ng dng Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 25

1.2.6 Interface Builder Interface Builder l trnh bin tp ha ca Apple thit k v kim th giao din ngi dng. 1. M Interface Builder: - Nhn p vo biu tng ng dng trong Finder. Interface Builder c t trong th mc /Application vi l th mc gc ci t Xcode. - Nhn p vo file Interface Builder trong Finder c phn m rng l .nib hay .xib. - Nhn p vo file Interface Builder trong ca s project ca Xcode. 2. To file Interface Builder Khi to mt project, Xcode s dng project template, trong project mi c to ra s cha mt tp file Interface Builder c bn. Khi mun to thm cc file Interface Builder, trong hp thoi Xcode chn New File, hoc trong giao din Builder chn File> New. Ca s Choose a Template c m ra:

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

26

Hnh 1.5 Interface Builder - New File

i vi mi mt file mi c to ra, Interface Builder cho php ngi dng chn mt template bt u. Cc template ny xc nh tp cc i tng khi to ban u s dng trong file giao din mi c to ra. Interface Builder cung cp mt s template khc nhau c lit k trong bng sau. Mi template hng ti mt mc tiu khc nhau. Ngi dng cng c th s dng template rng nu mun t thm cc i tng cho ti liu ca mnh. i vi bt k template c sn no, ngi dng cng c th loi b cc i tng khng mun.

Platform iPhone OS

Sn phm Template iPhone Application

View Window Empty iPad Application

View Window Empty Application

M t To mt file giao din s dng thit k giao din cho ng dng Cocoa Touch. File giao din ny cha 1 ca s. Dng thit k mt view trong ng dng Cocoa Touch Dng thit k mt ca s trong ng dng Cocoa Touch To mt file rng m ngi dng c th ty thm cc i tng To ra file thch hp to ng dng cho iPad, gm mt delegate v mt ca s ca ng dng To mt file thit k view cho ng dng iPad Dng d thit k mt ca s cho ng dng iPad To mt file giao din s dng thit k giao din cho ng dng Cocoa. File giao din ny cha 1 ca s. To ti liu thit k thanh thc n cho ng dng Cocoa Dng thit k mt view trong ng dng Cocoa Dng thit k mt ca s trong ng dng Cocoa 27

Mac OS X

Cocoa

Main Menu View Window

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

Empty Carrbon Application

Dialog Main Menu Window Empty Interface Builder Kit Inspector

To mt file rng m ngi dng c th ty thm cc i tng To mt file giao din s dng thit k giao din cho ng dng Carbon. File giao din ny cha 1 ca s. To ti liu thit k hp thoi cho ng dng Carbon To ti liu thit k thanh thc n cho ng dng Carbon Dng thit k mt ca s trong ng dng Carbon To mt file rng m ngi dng c th ty thm cc i tng To ti liu thit k mt Inspector cho Interface Builder plug-in Dng thit k cc phn t th vin cho Interface Builder plug-in

-

Library

Bng 1.2 Cc template ca Interface Builder 3. Ca s ti liu Interface Builder cung cp mt s ca s cho php ngi dng hin th v chnh sa cc i tng trong giao din s dng ca ng dng: ca s ti liu, ca s th vin, ca s Inspector, bng kt ni - Ca s ti liu: Mi ti liu Interface Builder lu tr thng tin v mt hoc nhiu i tng ngi s dng mun to ra ti thi gian chy trong ng dng ca mnh. Hu ht cc i tng tng ng vi cc phn t hin th trn mn hnh, chng hn nh ca s, view, iu khin, v thc n. Mt s i tng khng tng ng vi cc phn t hin th, chng hn nh cc i tng iu khin c chng trnh s dng qun l cc ca s v view ca mnh. V d mt ca s ti liu:

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

28

Hnh 1.6. Ca s ti liu Interface Builder

- Ca s th vin: Ca s th vin cha cc i tng v cc ti nguyn c thm vo ti liu Interface Builder. Hnh sau cho thy ca s th vin vi mt tp cc i tng nt Cocoa. Ngi dng c th ko mt i tng nt ln mt thit k nh mt ca s hoc view.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

29

Hnh 1.7 Ca s th vin Interface Builder

- Ca s Inspector: Ca s Inspector gip d dng hin th v iu chnh cc ci t cho i tng hin ang c chn. S dng cc biu tng ch dc theo pha trn ca s la chn mt pane v hin th cc ci t tng ng. Hnh sau cho thy ca s thuc tnh cho mt nt Cocoa

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

30

Hnh 1.8 Ca s thuc tnh Interface Builder

- Bng iu khin kt ni: Mt kt ni l cch cc thnh phn giao din kt hp vi m ngun. i vi ti liu c s dng nn tng Cocoa v Cocoa Touch, bng iu khin kt ni l mt cch nhanh chng to v qun l cc kt ni cho mt i tng c th.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

31

Hnh 1.9 Bng kt ni ca Interface Builder

1.3 Cng c lp trnh1.3.1 Ngn ng Objective-C 1. Lch s ca ngn ng Objective-C u nhng nm 70 ca th k trc, Dennis Ritchie ca phng th nghim AT&T Bell gii thiu ngn ng lp trnh C. Tuy nhin phi n cui nhng nm 70, ngn ng C mi tr nn ph bin do trc b bin dch cho C cha phi l sn phm thng mi bn ngoi phng th nghim Bell. n u nhng nm 80 ca th k trc, Brad J.Cox thit k nn ngn ng Objective-C. Ngn ng ny da trn mt ngn ng tn l SmallTalk-80. Objective-C tng trn ca ngn ng C vi ngha l nhng phn m rng c b sung vo C to thnh mt ngn ng lp trnh mi c th to ra v qun l i tng. NeXT Software ng k ngn ng Objective-C vo nm 1988 v pht trin th vin v mt mi trng pht trin cho n tn l NEXTSTEP. Nm 1994, NeXT Computer v Sun Microsystem pht hnh bn c t k thut chun ca h thng NEXTSTEP gi l OPENSTEP. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 32

20/12/1996, hng my tnh Apple cng b ginh c NeXT Software, v NEXTSTEP/OPENSTEP tr thnh nn mng c bn cho OS X, h iu hnh th h tip theo ca Apple. Phin bn mi trng pht trin ny ca Apple c gi l Cocoa. Nhiu h tr cho ngn ng Objective-C c tch hp sn, cng vi Xcode v Interface Builder, Apple to ra mt mi trng pht trin rt mnh cho pht trin ng dng trn h iu hnh Mac OS X. Nm 2007, Apple pht hnh bn cp nht ca Objective-C gi l Objective-C 2.0. Nm 2007 cng l nm Apple pht hnh iPhone. Ban u, Apple khng cho php cc ng dng ca bn th 3 chy trn thit b ny. Nhng sau mt thi gian khi mt s hacker b kha c iPhone v vit cc phn mm c th chy trn iPhone, Apple thay i chin lc. Apple thu chnh cc hacker ny vit nn iPhone SDK cho php cc nh pht trin c th vit ng dng cho iPhone. 2. Lp, i tng v thng ip a. Runtime: Ngn ng Objective-C gim nh ti mc ti thiu nhng vic cn lm ti thi gian bin dch (compile time) v lin kt (link time) y ht cho lc chy (runtime). Bt c khi no c th, n t ng thc hin cc hot ng nh to cc i tng v xc nh xem s gi phng thc no. iu ny c ngha rng ngn ng khng ch i hi mt trnh bin dch, m cn cn mt runtime system thc thi m bin dch. Runtime system hot ng nh mt loi h iu hnh cho ngn ng Objective-C v nh n m ngn ng ny mi c th lm vic. Tuy nhin, cc lp trnh vin khng nht thit phi tng tc trc tip vi runtime. b. i tng: Khi nim i tng trong Objective-C khng khc so vi trong cc ngn ng lp trnh hng i tng khc nh l Java , C++ hay C#. i tng bao gm cc thuc tnh v cc phng thc. *id: Trong Objective-C, nh danh ca i tng l mt loi d liu c bit: id. y l kiu chung cho bt k loi i tng no k c lp. (N c th c s dng cho c th hin ca lp v chnh bn thn i tng lp) . id l con tr ti cu trc d liu i tng: typedef struct objc_object { Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 33

Class isa; } *id; Do , tt c cc i tng u cha bin thnh phn isa xc nh xem n l th hin ca lp no. Ging nh mt hm hay mng ca C, mt i tng c xc nh bi a ch ca n. Tt c cc i tng, bt k bin v phng thc thnh phn ca n l g, u thuc loi id. id anObject;

*Xc nh kiu d liu ng: Kiu d liu id c th i din cho tt c cc i tng tuy nhin bn thn n li khng cha bt k thng tin no v i tng, ngoi vic ch ra rng l mt i tng. Nhng cc i tng khng h ging nhau. Khi cn thit, chng trnh cn phi tm thm thng tin c th v i tng: cha cc d liu kiu g, c cc phng thc no. Bi v kiu d liu id khng th cung cp thng tin ny cho trnh bin dch nn cc i tng phi c kh nng cung cp cc thng tin ny khi chy. Thuc tnh isa xc nh lp ca i tng ngha l xc nh xem i tng thuc loi g. Cc i tng c cng cc phng thc v cc bin thnh phn l thnh vin ca cng mt lp. Do cc i tng c xc nh kiu d liu ng khi chy. Bt c khi no n cn, runtime system c th tm thy chnh xc lp ca mt i tng. Xc nh kiu d liu ng l nn tng cho rng buc ng (dynamic binding), c trnh by sau y. Bin isa cng cho php cc i tng t tm hiu v bn thn mnh. Trnh bin dch ghi li cc thng tin v nh ngha lp trong cu trc d liu c dng cho runtime system. Cc hm ca runtime system s dng isa tm thng tin ny khi chy. *Qun l b nh: Trong mt chng trnh Objective-C, vic m bo rng cc i tng c gii phng khi b nh khi khng cn cn thit na ht sc quan trng nu khng b nh ng dng s tr nn ln hn mc cn thit. Cng quan trng m bo rng khng gii phng cc i tng trong khi n vn cn ang c s dng.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

34

Objective-C cung cp hai mi trng qun l b nh t c cc mc tiu ny: - Reference counting - Garabge collection (khng c trn iPhone). c. Thng ip (message): * C php: khin mt i tng lm g, cn phi gi cho n mt thng ip n thc hin mt phng thc no ca mnh. Trong Objective-C, biu thc thng ip c t trong du ngoc vung: [i_tng_nhn thng_ip]

Trong m ngun, thng ip chnh l tn ca mt phng thc v cc tham s c truyn vo cho n. Khi mt thng ip c gi i, runtime system la chn phng thc thch hp t cc phng thc ca i tng nhn v chy n. Tn phng thc trong mt thng ip dng chn phng thc thc thi. V l do ny, tn phng thc trong thng ip cn c gi l selector. Cc phng thc c th nhn s tham s truyn vo ty , cch nhau bi du :. V trnh nhm ln c th t tn cho cc tham s. V d: [myRectangle setOriginX: 30.0 y: 50.0] Mt thng ip c th c lng trong thng ip khc. V du: [myRectangle setPrimaryColor:[otherRect primaryColor]]; * Gi thng ip ti i tng nil: trong Objective-C, iu ny hon ton hp l, n ch n gin khng gy hiu ng g trong khi chy. *Rng buc ng (Dynamic Binding): Mt khc bit quan trng gia li gi hm v thng ip l mt hm v cc tham s ca n c lin kt vi nhau trong m bin dch, nhng thng ip v i tng tip nhn khng thng nht cho n khi chng trnh ang chy v tin nhn c gi i. V vy, phng thc chnh xc c gi tr li mt phng thc ch c th c xc nh ti thi gian chy, khng phi khi m c bin dch.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

35

Phng thc chnh xc m mt thng ip gi s ph thuc vo i tng nhn. Cc i tng khc nhau c th c cc phng thc khc nhau thc thi cng mt li gi hm (tnh a hnh). i vi trnh bin dch, tm ra phng thc thc thi ng thng ip, n cn phi bit i tng thuc lp no. Nhng thng tin ny ch c i tng tit l ti thi gian chy khi n nhn c thng ip (xc nh kiu ng). Vic la chn mt phng thc thc hin s xy ra khi chy. Khi mt thng ip c gi, mt runtime messaging rountine s tm kim i tng nhn v phng thc c tn trong thng ip. Tnh rng buc ng ca phng thc (dynamic binding) vi cc thng ip kt hp cht ch vi tnh a hnh a hnh to nn tnh linh hot v sc mnh ca ngn ng lp trnh hng i tng. d. Lp (Class): Lp nh ngha mt nguyn mu cho mt loi i tng, n khai bo cc bin v nh ngha mt tp hp cc phng thc thnh phn. Mi lp c to ra u phi l lp con ca mt lp khc v n k tha cc phng thc cng nh bin thnh phn ca lp ny. thc thi cc tc v ca mnh, lp mi s b sung cc bin v phng thc mi hay sa cc phng thc m n c k tha. *Lp NSObjects: NSObject l lp gc, nn n khng c lp cha. N nh ngha framework c bn cho cc i tng v tng tc gia cc i tng ca Objective-C. Nhng lp khng cn k tha cc phng thc c bit t lp khc c th l t l lp con ca lp NSObject. *i tng lp: Mt nh ngha lp cha nhiu thng loi thng tin, ch yu l cc thnh phn ca lp: - Tn ca lp v lp cha ca n - Tp cc bin thnh phn - Khai bo cc phng thc, kiu tr v v tham s ca phng thc - Code thc thi cc phng thc.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

36

Nhng thng tin ny c bin dch v ghi li trong cu trc d liu to sn cho runtime system. Trnh bin dch s ch to ra mt i tng, i tng lp, i din cho lp. i tng lp c quyn truy cp tt c cc thng tin v lp. Mc d mt i tng lp gi cc nguyn mu ca th hin lp, n khng phi l mt th hin. N khng c cc bin ca ring n v n khng th t thc hin phng thc dnh cho th hin ca lp. Tuy nhin, mt nh ngha lp c th bao gm cc phng thc dnh ring cho cc i tng lp gi l cc phng thc tnh ca lp. Trong m ngun, i tng lp c biu din bng tn lp. *To mt th hin ca lp: Mt chc nng chnh ca i tng lp l to ra cc th hin mi ca lp . V d on code sau s yu cu lp Rectangle to ra mt th hin Rectangle v gn n cho bin myRectangle: id myRectangle; myRectangle = [Rectangle alloc]; Phng thc alloc cp pht 1 vng b nh ng cho cc bin thnh phn ca i tng mi v khi to tt c v 0 ngoi tr bin isa th hin vi lp ca n. i tng c th s dng c, n thng cn phi c khi to. l chc nng ca hm init thng c gi ngay sau hm alloc: myRectangle = [[Rectangle 3. nh ngha mt lp Objective-C chia mt lp thnh file giao din (interface) v file thc thi (implementation). File giao din khai bo cc bin v phng thc thnh phn. N l mt file header ca C chun v khng cha bt k dng code thc thi no. File thc thi cha code thc thi ca cc phng thc ca lp. File thc thi c phn ui m rng l .m. V d nh ngha mt lp Simple: File giao din: Simple.h #import @interface Simple : NSObject{ } Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 37 alloc] init];

@end File thc thi: Simple.m @import Simple.h @implementation Simple @end *Ch th bin dch @interface v @implementation: Trong file Simple.h, lu ti ch th bin dch @interface. Trong file Simple.m, lu ti ch th bin dch @implementation. Nhng ch th ny phn bit giao din ca mt lp vi phn thc thi ca n. Phn code nm gia ch th @interface v @end trong Simple.h cha giao din ca lp Simple, trong on code nm gia @implementation v @end trong file Simple.m cha phn thc thi ca lp Simple. *Khai bo v nh ngha phng thc: Cc bin v phng thc thnh phn c khai bo trong file giao din v c nh ngha trong file thc thi ca lp. Khai bo mt phng thc ngha l thng bo cho trnh bin dch bit lp c phng thc nhng khng cung cp code thc s cho phng thc . V d mt khai bo phng thc: - (void) sayHello: (NSString *) name; Phn khai bo ch ra cho trnh bin dch bit rng c mt phng thc c tn sayHello c mt tham s truyn vo c kiu NSString v khng tr li g c (void). Phn khai bo khng ni g n ni dung ca hm. Trnh bin dch s tm thy on code thc thi ca phng thc trong phn nh ngha phng thc. V d, phn nh ngha ca phng thc sayHello trn: - (void) sayHello : (NSString *) name{ NSLog(@Hello %@, name); } *Cc phn t trong file giao din ca lp: Giao din ca lp bao gm cc cu lnh import, khai bo lp, khai bo bin v thuc tnh thnh phn. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 38

Hnh 1.10 Cu trc file giao din ca mt lp

* Cc phn t trong file thc thi ca lp: Giao din ch l mt na ca lp. Thc thi ca lp cng quan trng nh l giao din ca n vy. *Cc bin thnh phn public, private, protected: Cc bin thnh phn ca lp c th l public, private hay protected. Bin private l bin ch c s dng trong lp m thi, cc lp con khng k tha bin private ca lp cha, cc lp khc khng th truy nhp vo bin private ca lp khc. Bin protected cho php k tha nhng khng cho php cc lp khc truy nhp vo. Bin public cho php tt c cc lp khc u truy nhp c vo.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

39

Hnh 1.11 Cu trc file thc thi ca mt lp

* S dng i tng self trong mt thng ip: Thut ng self m ch bn thn i tng khi gi mt thng ip i v n cng ng thi l i tng nhn thng ip . N dng ch i tng hin thi tng t nh i tng this trong Java. *Qun l b nh s dng retain v release Khng ging nh Java hay C#, khi lp trnh cho iPhone, lp trnh vin phi t qun l b nh v trong iPhone khng c b gom rc (garbage collection). Mc d n phin bn OS X 10.5, Cocoa c ty chn s dng garbage collection t ng nhng ty chn ny vn cha c trn iPhone. Bng sau tng kt cc phng thc qun l b nh ca Objective-C: Phng thc + alloc - autorelease - dealloc - release - retain - copy Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 40 M t Cp pht mt vng b nh cho i tng mi v gn retain count ca i tng bng 1 a i tng nhn thng ip ny vo autorelease pool Gii phng b nh cho i tng c retain count bng 0 Gim retain count ca i tng i 1 Tng retain count ca i tng ln 1, tr v mt i tng id

Bng 1.3 Cc phng thc qun l b nh ca Objective-C *Qun l b nh s dng Autorelease Vic t qun l retain count c th nhiu lc gy ra nhm ln hay li. Phng thc autorelease ca i tng NSObject s gip qun l retain count. Phng thc autorelease s dng li gi release pool qun l tham chiu ca i tng. V du: - (void) sayHelloTom { Simple *objSimple = [[[Simple alloc] init] autorelease]; [objSimple sayHello:@"Tom"]; } Hm sayHelloTom s cp pht mt vng b nh cho th hin ca lp Simple v sau gi hm autorelease, gn i tng objSimple cho autorelease pool. Khi phng thc c thc hin xong, autorelease pool c gii phng v do th hin ca lp Simple objSimple cng c gii phng. S dng autorelease v chp nhn autorelease pool ch mc nh lm cho vic qun l b nh tr nn d dng. Tuy nhin, c vn ny sinh: cc i tng ko thi gian tn ti ca release pool. Ch c mt cch gii quyt l t qun l i tng NSAutoReleasePool. V d: - (void) sayHelloTom { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Simple *objSimple = [[[Simple alloc] autorelease] init]; [objSimple sayHello:@"Tom"]; [pool release]; } *Thuc tnh: Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 41

S dng i tng Objective-C tc l thao tc vi con tr. Con tr tr n khng gian b nh. Thay i mt bin thnh phn c kiu tha k t NSObject thc cht l thay i khng gian b nh n ch vo. Thay i khng gian b nh mt bin ch ti m khng gi li (retain) hay gii phng (release) thng gy ra li. Qun l b nh khi ly ra hay gn mt gi tr cho bin thnh phn l mt vic khng d dng.Objective-C 2.0 gip cho vic ny tr nn d dng hn s dng thuc tnh. Thuc tnh l cc phm tt to mt phn t truy nhp vo bin thnh phn. To thuc tnh bng cch s dng ch th bin dch @property. @property khai bo mt thuc tnh, @synthesize ni cho trnh bin dch bit phi sinh ra mt phn t truy nhp v @dynamic thng bo cho trnh bin dch bit l ngi dng s cung cp hm truy nhp. Mt ch th thuc tnh cng c mt s thuc tnh c lit k trong bng sau:

Property Attribute assign copy nonatomic readonly readwrite retain

Description Hm setter s gn bin thnh phn cho i tng Hm setter sao chp i tng cho bin thnh phn Tr li gia tr m khng cn gi retain hay autorelease trn i tng bin thnh phn ch c c, khng th thit lp gi tr cho n bin thnh phn c hm getter v setter (mc nh) Hm setter s gn bin thnh phn cho mt i tng v gi hm retain. Bng 1.4 Property attribute

*iu khin ngoi l: iu khin ngoi l trong Objective-C tng t nh Java v C++. Objective-C c khi @try - @catch- @finall bt cc ngoi l.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

42

1.3.4 Lp trnh mng 1. Tng quan:iPhone OS bao gm mt s framework v th vin cho php xy dng cc ng dng c kh nng truy nhp mng. Lp trnh vin c th truy nhp vo cc dch v v giao thc chnh thng qua Foundation v Core Foundation cng nh l thng qua CFNetwor v BSD Socket. - Foundation l framework xy dng trn nn tng Objective-C, cung cp cc tru tng (abstraction) cho nhiu CFNetwork API. - Core Foundation l framework xy dng trn nn tng C, cung cp cc phng thc tin li khng ph thuc vo h thng to, c, update, v xa cc ti nguyn URL. - CFNetwork l framework xy dng trn nn tng C cho php ng dng thi hnh nhiu tc v network, nh l kt hp socket vi run loop (vng lp chy) v lin lc vi HTTP v FTP server. - CFNetServices l API xy dng trn nn tng C cho php pht hin hay ng k dch v mng Bonjour, nh l printer hay file server. - NSNetService v NSNetServiceBrowser l cc lp trong Foundation framework gip qun l cc dch v mng Bonjour . - BSD networking API - mt phn ca libSystem- cung cp cc hm socket mc thp, kh l quen thuc vi nhng ngi s dng socket trong cc nn tng khc. Khi s dng cc giao din ny, lp trnh vin khng phi t chn khi no s dng WiFi hay l sng in thoi. Cc giao din s t ng truy nhp vo thit b phn cng di, chn cch truyn tt nht, v t ng chuyn i t ci ny sang ci khc nu cn.

a. Download ti nguyn s dng URL :Core Foundation URL Access Utilities (CFURL) v NSURL API (xy dng trn nn CFURL), cung cp cch thc n gin download ti nguyn t web server hay FTP server. CFURL l cc API xy dng trn nn tng C, thuc framework Core Foundation. NSURL l cc API xy dng trn nn tng Objective-C, thuc framework Foundation.

b. Tng tc vi Web v File Servers s dng HTTP v FTP Streams:Nu ng dng ca cn tng tc vi web server hay FTP server vt qua kh nng ca CFURL v NSURL, nn s dng CFHTTPStream v CFFTPStream API. Chng h tr cc

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

43

request HTTP v FTP phc tp nh l HTTP GET v POST, HTTP cookie v request header management, c th mc FTP v ti file ln FTP.

c. Lin lc s dng socket:Nu ng dng s dng socket, iPhone OS cung cp giao din lp trnh tch hp socket vi runloop trong Core Foundation cng nh l trc tip truy nhp vo BSD socket. - Cc ng dng mng cho Mac OS X v ng dng mng cho iPhone OS c th s dng cng mt giao din lp trnh mng. - Mc d giao din lp trnh mng cho BSD (POSIX) c trong iPhone OS, nhng hang Apple khuyn nn trnh dng chng. Nu giao tip trc tip vi socket mt s kh nng mng ca iPhone OS khng lm vic (v nh VPN On Demand). Nn s dng API c cung cp bi CFStream Socket Additions. - hc v lp trnh BSD c UNIX Socket FAQ.

d. ng k v pht hin dch v mngC th ng k hay pht hin mt dch v mng s dng Bonjour. lm iu , s dng CFNetServices trn nn C hoc NSNetServices API trn nn Objective-C.

2. Lp trnh mng vi CFNetwork CFNetwork l framework trong Core Services framework, cung cp mt th vin cc tru tng cho giao thc mng. Cc tru tng gip thc thi nhiu tch v lin quan n mng nh l : - Lm vic vi BSD socket - To cc kt ni m ha s dng SSL hay TLS. - Resolving DNS host - Lm vic vi HTTP, authenticating HTTP v HTTPS server - Lm vic vi FTP server - Publishing, resolving v browsing Bonjour services. a. Cc khi nim CFNetwork l mt framework mc thp, hiu sut cao cho php ngi dng kh nng iu khin chi tit ngn xp giao thc. N l mt m rng ca BSD socket, giao din tru tng socket chun cung cp cc i tng n gin ha cc tc v Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 44

nh giao tip vi my ch FTP v HTTP hoc gii quyt DNS host. CFNetwork da trn cc BSD socket. Cng nh CFNetwork da trn BSD socket, mt s lp Cocoa cng da trn CFNetwork. NSURL l mt trong nhng lp , c s dng lin lc vi server s dng giao thc Internet chun. Thm na, Web Kit l tp cc lp Cocoa hin th ni dung web trong ca s. Cc lp ny u mc high level v t thc thi hu ht chi tit ca giao thc mng.

Hnh 1.12 CFNetwork v cc lp phn mm khc trong Mac OS X

b. Khi no s dng CFNetwork CFNetwork c mt s u im so vi BSD socket. N tch hp run loop, do , trong cc ng dng ca mnh, lp trnh vin c th s dng cc giao thc mng m khng cn phi s dng thread. CFNetwork cng cung cp mt s i tng gip s dng cc giao thc mng m khng cn thc thi chi tit. V d c th s dng giao thc FTP m khng cn thc thi tt c giao din lp trnh CFFTP. C mt s u im ca vic s dng CFNetwork thay v s dng Cocoa framework NSURL: CFNetwork tp trong nhiu hn vo giao thc mng, NSURL tp trung nhiu hn vo truy nhp d liu, cng nh l truyn d liu qua HTTP hay FTP. CFNetwork cung cp nhiu kh nng cu hnh hn NSURL. Thm na, NSURL yu cu s dng Objective-C. c. CFNetwork Infrastructure CFNetwork da trn 2 giao din lp trnh l mt phn ca Core Foundation frame work, CFSocket v CFStream. * CFSocket API:

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

45

Socket l mc c bn nht ca giao tip mng. Socket hot ng ging nh bung in thoi. N cho php kt ni vi socket khc (local hay thng qua mng) v gi d liu cho cc socket . Socket thng hay s dng nht l BSD socket. CFSocket l mt tru tng ca BSD socket. CFSocket cung cp hu ht cc chc nng ca BSD socket, n tch hp socket vo run loop. CFSocket khng b gii hn bi loi socket da trn lung m n c th iu khin bt k loi socket no. to i tng CFSocket, c th gi hm CFSocketCreate hay thng qua mt BSD socket bng cch s dng hm CFSocketCreateWithNative. Sau , to ngun run-loop s dng hm CFSocketCreateRunLoopSource v y n vo run loop s dng hm CFRunLoopAddSource => cho php hm CFSocket callback c th chy bt c khi no i tng CFSocket nhn c 1 thng ip. * CFStream API c v ghi stream l cch thc n gin trao i d liu a phng tin theo cch khng ph thuc vo thit b phn cng. Cc stream c th ly ngun t d liu c sn trong b nh, trong file hay trn mng (s dng socket) v khi s dng stream, khng phi tt c d liu u cn phi ti vo b nh mt ln. Stream l mt dy byte c truyn tun t qua ng truyn. Stream ch c truyn theo mt hng nn nu mun lin lc 2 chiu th phi to ra 2 stream: input stream ( c) v output stream ( ghi). Ngoi tr nhng stream ly ngun t file, khng th di chuyn n v tr bt k trong stream, sau d liu stream c truyn i, n khng th ly li c. CFStream l mt giao din lp trnh cung cp mt tru tng cho cc stream ny vi 2 i tng CFType mi: CFReadStream v CFWriteStream. C 2 loi stream u tun theo cc quy c lp trnh ca Core Foundation. CFStream c xy dng trn CFSocket v l nn tng cho CFHTTP v CFFTP.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

46

Hnh 1.13 Cu trc CFStream API

S dng stream c v ghi d liu: - To mt i tng stream bng cch ch r loi (b nh, file hay socket) v thit lp cc ty chn ca i tng . - M stream ghi hay c Khi stream ang tn ti, ly thng tin ca stream thng qua cc thuc tnh ca n. Thuc tnh ca stream l tt c thng tin v stream nh l ngun, ch, y khng phi l mt phn ca d liu c c ghi, m ch l thng tin v bn thn stream thi. Khi khng cn s dng na, stream cn c ng v gii phng. Cc hm CFStream c hay ghi stream s chn tin trnh hin ti cho n khi no t nht 1 byte d liu c c hay ghi. trnh ghi hay c stream khi stream b chn (ng) s dng phin bn khng ng b ca hm v xp lch stream trn run loop. Hm callback (t vit) c gi khi c th c v ghi m khng b chn. Thm na, CFStream c giao thc SSL (Secure Sockets Layer) c xy dng sn. Ngi dng c th thit lp mt t in cha thng tin SSL ca stream, nh l mc bo mt hay ch k c nhn. Sau n c truyn qua stream nh l thuc tnh kCFStreamPropertySSLSetting khin stream tr thnh mt SSL stream. d. Cc khi nim CFNetwork API * CFFTP API: Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 47

Lin lc vi server FTP tr nn rt n gin khi s dng CFFTP. S dng CFFTP API, c th to ra stream c FTP ( download) v stream ghi FTP ( upload). Stream c v ghi FTP c th thc thi cc hm: - Download file t FTP server - Upload file ln FTP server - Download th mc trn FTP server - To mt th mc trn FTP server FTP stream lm vic ging nh cc CFNetwork stream khc. V d, to mt stream c FTP bng cch gi hm CFReadStreamCreateWithFTPURL. Sau gi hm CFReadStreamGetError vo bt k lc no kim tra trng thi ca stream. Bng cch thit lp ca FTP Stream, lp trnh c th thch ng cc stream cho mt ng dng c th. V d, nu server m khi kt ni stream vo yu cu username v password, cn phi thit lp cc thuc tnh tng ng stream c th lm vic CFFTP stream c th c s dng ng b hay khng ng b. m mt kt ni ti FTP server cn phi ch r khi no stream c FTP c to ra, gi hm CFReadStreamOpen. c t stream, s dng hm CFReadStreamRead v cung cp mt nh x ti stream c, CFReadStreamRef, c tr li khi stream c FTP c to ra. Hm CFReadStreamRead "lm y" buffer vi output t FTP server. * CFHTTP API gi v nhn thng ip HTTP, s dng CFHTTP API. CFHTTP l tru tng ca giao thc HTTP. HTTP l giao thc yu cu/p ng gia client v server. Client to mt yu cu. Yu cu ny s c chuyn thnh lung byte.. Sau , yu cu c gi cho server. Yu cu thng l yu cu file, nh l 1 webpage. Server tr li, gi tr v mt chui. Qu trnh ny lp li nhiu ln khi cn thit. to mt thng ip yu cu ca HTTP cn phi lm cc vic sau: - Xc nh cch thc yu cu: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE hay CONNECT - Xc nh URL: v d http://www.apple.com Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 48

- Xc nh HTTP version: v d version 1.0 hay 1.1 - Xc nh phn u ca thng ip bng cch ch r tn header, nh l UserAgent, v gi tr ca n, nh l MyUserAgent. - Xc nh phn thn ca thong ip Sau khi thng ip c cu trc ha, phn tch n thnh lung byte, lc ny yu cu c dng tng t nh sau: GET / HTTP/1.0\r\nUser-Agent: UserAgent\r\nContent-Length: 0\r\n\r\n Tng hp t lung byte ngc vi phn tch thnh lung byte. Vi tng hp t lung byte, lung byte th nhn c t client hay server c khi phc li trng thi ban u. CFNetwork cung cp tt c cc hm cn thit ly c loi d liu, HTTP version, URL, header, v thn t thng ip c phn tch thnh lung byte. * CFHost API CFHost API cha cc thng v host nh l: tn, a ch, v cc thng tin c th ly c. Qu trnh thu thp trng tin v host c gi l s phn tch S dng CFHost ging nh l s dng CFStream: - To i tng CFHost - Bt u phn tch i tng CFHost - Ly thng tin v a ch, tn hay thng tin c th ly c ca host - Hy i tng CFHost khi lm vic xong vi n. CFHost tng thch vi IPv4 v IPv6. CFHost gn kt cht ch vi cc phn cn li ca CFNetwork. V d, hm CFStream : CFStreamCreatePairWithSocketToCFHost s to mt i tng CFStream trc tip t i tng CFHost. * CFNetServices API CFNetServices API c s dng khi cn dch v mng Bonjour ng k hay pht hin cc dch v Bonjour. thc thi Bonjour, CFNetServices API nh ngha 3 loi i tng: CFNetService, CFNetServiceBrowser v CFNetServiceMonitor. i tng Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 49

CFNetService biu din mt dch v mng n l, nh l printer or a file server. N bao gm tt c cc thng tin cn thit cho my khc c th resolve server , nh l tn, loi, domain v cng. CFNetwServiceBrowser l mt i tng c s dng pht hin domain and dch v mng trong domain. V i tng CFNetServiceMonitor c s dng gim st thay i ca i tng CFNetService. * CFNetDiagnostics API ng dng kt ni vo mng ph thuc vo s kt ni n nh. Nu mng b "rt", n s gy ra mt s vn vi ng dng. Bng cch lm theo CFNetDiagnostics API, ngi s dng c th t chun on cc vn lin quan ti mng nh l: - Physical connection failure: Hng kt ni do l do vt l (cp khng c cm vo) - Network failure (DNS hay DHCP server khng cn respond) - Configuration failure (cu hnh proxy khng ng). Khi network failure c chun on, CFNetDiagnostics hng dn ngi dng sa li. e. Lm vic vi Stream * Lm vic vi stream c to mt stream c: CFReadStreamRef myReadStream CFReadStreamCreateWithFile(kCFAllocatorDefault, fileURL); =

Tham s kCFAllocatorDefault ch ra rng b cp pht b nh mc nh hin ti ca h thng c s dng cp pht b nh cho stream. Tham s fileURL ch ra tn ca file m stream c s c. Khi stream c to ra, c th m stream c. M mt stream khin cho stream gi c cc ti nguyn h thng m n cn, v d nh m t file (cn thit m mt file) V d m mt stream c: if (!CFReadStreamOpen(myReadStream)) { CFStreamError Sinh vin thc hin: An Th Hng - Kha 50 - CNPM myErr = 50

CFReadStreamGetError(myReadStream); // An error has occurred. if (myErr.domain == kCFStreamErrorDomainPOSIX) { // Interpret myErr.error as a UNIX errno. } else kCFStreamErrorDomainMacOSStatus) { if (myErr.domain ==

// Interpret myErr.error as a MacOS error code. OSStatus macError = (OSStatus)myErr.error; // Check other error domains. } } Hm CFReadStreamOpen tr li TRUE nu thnh cng, FALSE nu tht bi. Nu CFReadStreamOpen tr li FALSE, v d trn s gi hm CFReadStreamGetError ly v thng tin ca li c biu din trong CFStreamError gm 2 gi tr: m domain v m li. M domain biu th cch thc m li c bin dch. V d: kCFStreamErrorDomainPISIX -> m li l gi tr li ca UNIX kCFStreamErrorDomainMacOSStatus -> m li l gi tr OSStatus c nh ngha trong MacErrors.h kCFStreamErrorDomainHTTP -> m li l gi tr c nh ngha trong CFStreamErrorHTTP enumeration. M mt stream c th l mt qu trnh tn nhiu thi gian, nn hm CFReadStreamOpen v CFWriteStreamOpen trnh b chn bng cch tr li TRUE biu th rng qu trnh m stream bt u. kim tra trng thi ca qu trnh m, gi hm CFReadStreamGetStatus v CFWriteStreamGetStatus --> tr v kCFStreamStatusOpening nu qu trnh m vn ang c x l, kCFStreamStatusOpen nu qu trnh m hon tt, hay kCFStreamStatusErrorOccurred nu qu trnh m hon tt nhng b hng. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 51

*Lm vic vi stream ghi: Lm vic vi stream ghi tng t vi stream c. im khc bit chnh l hm CFWriteStreamWrite khng tr v lng byte c truyn vo cho n m tr li s byte n thc s ghi. V d to v s dng stream ghi: CFWriteStreamRef myWriteStream = CFWriteStreamCreateWithFile(kCFAllocatorDefault, fileURL); if (!CFWriteStreamOpen(myWriteStream)) { CFStreamError myErr = CFWriteStreamGetError(myWriteStream); // An error has occurred. if (myErr.domain == kCFStreamErrorDomainPOSIX) { // Interpret myErr.error as a UNIX errno. } else if (myErr.domain == kCFStreamErrorDomainMacOSStatus) { // Interpret myErr.error as a MacOS error code. OSStatus macError = (OSStatus)myErr.error; // Check other error domains. } } UInt8 buf[] = "Hello, world"; UInt32 bufLen = strlen(buf);

while (!done) { CFTypeRef bytesWritten = CFWriteStreamWrite(myWriteStream, buf, strlen(buf)); if (bytesWritten < 0) { CFStreamError error = CFWriteStreamGetError(myWriteStream); Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 52

reportError(error); } else if (bytesWritten == 0) { if (CFWriteStreamGetStatus(myWriteStream) == kCFStreamStatusAtEnd) { done = TRUE; } } else if (bytesWritten != strlen(buf)) { // Determine how much has been written and adjust the buffer bufLen = bufLen - bytesWritten; memmove(buf, buf + bytesWritten, bufLen);

// Figure out what went wrong with the write stream CFStreamError error = CFWriteStreamGetError(myWriteStream); reportError(error);

} } CFWriteStreamClose(myWriteStream); CFRelease(myWriteStream); myWriteStream = NULL; * Ngn khng cho b chn (blocking) khi lm vic vi stream Khi lm vic vi stream, c bit l vi stream da trn socket, thng xuyn xy ra trng hp d liu truyn mt nhiu thi gian. Nu stream c s dng theo cch ng b th ton b ng dng s b buc phi ch cho n khi d liu c truyn

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

53

xong. Trong thi gian , khng th tc ng g ln ng dng. V vy cn phi c mt phng php ngn nga tnh trng b chn. C hai cch ngn b chn khi c hoc vo mt i tng CFStream: - Polling: i vi stream c, xc nh trc c byte c trc khi c t stream. i vi stream ghi, xc nh trc khi no stream c th ghi m khng b chn trc khi ghi vo stream. - S dng mt run-loop: ng k nhn c cc s kin lin quan n stream v lp lch stream trn mt run loop. Khi mt s kin lin quan n stream xy ra, hm gi li (t vit) s c gi. 1.3.5 MultiThreading 1. V lp trnh thread a. Thread l g? Thread l cch thc tng i nh thc hin nhiu tc v cng lc trong mt ng dng. mc h thng, cc chng trnh chy cnh nhau v c h thng phn pht cho thi gian thc hin ty thuc vo chng trnh cn bao nhiu thi gian thc hin v thi gian thc hin ca cc chng trnh khc. Tuy nhin, trong mt chng trnh, c th tn ti mt hay nhiu thread c s dng thc thi cc tc v khc nhau ng thi hay gn nh ng thi. H thng t n qun l cc thread ny, lp k hoch cho cc thread v tm thi ngt chng khi cn thit cho php thread khc chy. Xt v gc k thut th thread l s kt hp gia cu trc d liu cp ht nhn v ng dng, cn thit qun l vic thc thi code. Cu trc cp ht nhn phi hp cc s kin v lp lch u tin cho cc thread vi mt trong cc core c sn. Cu trc cp ng dng gm mt ngn xp cha li gi hm v cc cu trc ng dng cn qun l v s dng cc thuc tnh v trng thi ca thread. Trong mt ng dng hot ng khng ng thi, ch c mt thread c thc hin. Thread bt u v kt thc vi main rountine v chuyn t phng thc ny sang phng thc khc thc hin hnh vi tng th. Ngc li, ng dng hot ng ng thi bt u vi mt thread v add thm cc thread khi cn thit. Mi mt thread mi c start rountine ca ring n v chy c lp vi m trong main rountine ca chng trnh chnh. ng dng cho php chy nhiu thread c 2 u im quan trng: Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 54

- Multiple thread gip tng kh nng p ng ca ng dng - Multiple thread tng thi gian thc hin thc s trn h thng a li. Vi ng dng ch c mt thread, thread phi lm mi th. N phi p ng cc s kin, cp nht ca s ng dng, v thc hin tt c cc tnh ton cn thit. Vn ca vic ch c duy nht mt thread l n ch c th lm mt vic mt lc. Vy, iu g xy ra khi mt trong cc tnh ton cn nhiu thi gian hon thnh? Trong khi vic tnh ton vn c thc hin, chng trnh s ngng p ng cc s kin cng nh cp nht ca s. Nu tnh trng ny xy ra lu, ngi dng c th ngh rng chng trnh b treo v c gng tt n. Tuy nhin vn ny c th d dng c gii quyt nu chuyn cng vic tnh ton trn sang mt thread ring bit, khi main thread ca chng trnh vn c t do p ng cc tng tc ca ngi dng mt cch kp thi. Vi cc my tnh a li ph bin hin nay, thread gip tng hiu sut ca mt s chng trnh. Cc thread c th c th thc hin tc v khc nhau mt cch ng thi trn cc li x l khc nhau, gip cho chng trnh c th tng s lng cng vic lm c trong mt khong thi gian. Tuy nhin, thread khng phi l liu thuc cha bch bnh cho vn hiu sut thc thi ca chng trnh. Cng vi cc li ch, thread cng mang n cc vn tim tng. C nhiu ng thc thi trong ng dng tng ng vi vic lm tng phc tp cho code. Mi thread phi phi hp hnh ng ca n vi cc thread khc ngn n khi lm hng thng tin trng thi ca chng trnh. V cc thread trong mt ng dng chia s cng mt khng gian b nh, chng c quyn truy sut vo tt c cc cu trc d liu ging nhau. Nu c 2 thread c gng thao tc trn cng mt cu trc d liu ti cng mt thi im, mt thread c th ghi ln thay i ca thread kia gy li chng trnh. b. La chn thay th thread Thread l cch mc tng i thp v phc tp h tr x l ng thi trong chng trnh. Nu khng hiu y ngha ca vic mnh ang lm, lp trnh vin c th d dng gp cc vn v ng b ha hay thi gian, mc nghim trng trong c th l t nhng thay i nh cho n lm cho ton b chng trnh b sp . Mt yu t khc cn xem xt l liu c cn thread hay x l ng thi. Thread gii quyt vn lm th no thc thi nhiu tc v ng thi trong cng mt x l. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 55

C nhng trng hp c mt s cng vic khng c thc hin ng thi. Thread cng gy ra s tiu tn v b nh v CPU time. Bng sau lit k mt s la chn thay th thread. Bng ny bao gm c cng ngh thay th cho thread (chng hn nh cc i tng hot ng v GCD) v la chn thay th c hng ti hiu qu s dng single thread m chng trnh c Cng ngh i tng hot (Operation objects) M t ng c gii thiu trong Mac OS X v10.5, i tng hot ng l wrapper cho mt tc v thng c thc hin trn thread th hai. Wrapper ny giu nhng kha cnh qun l thread thc hin tc v gip lp trnh vin tp trung vo bn thn cc tc v. Cc i tng ny thng c s dng cng vi mt i tng hng i qun l vic thc thi ca cc i tng hot ng trn mt nhiu thread. Grand Central Dispatch c gii thiu trong Mac OS X v10.6, Grand Central (GCD) Dispatch l mt thay th khc cho thread khin ngi lp trnh tp trung vo cc nhim v cn thc hin hn l qun l thread. Vi GCD, cn xc nh nhim v mun thc hin v thm n vo mt hng i. Hng i ny s iu khin vic lp lch cho cc tc v trn mt thread thch hp. Hng i a vo ti khon s lng cc li sn dng v ti xung thc hin tc v hiu qu hn so vi t lm bng thread Idle-time notificaitons i vi tc v tng i ngn v c mc u tin thp, Idle-time notificaitons cho php ngi lp trnh c th thc hin nhim v mt thi im ng dng nhn ri. Cocoa s dng i tng NSNotificationQueue h tr idle-time notification. yu cu mt idle-time notification, ng mt thng bo cho i tng mc nh NSNotificationQueue s dng ty chn NSPostWhenIdle. Hng i s lm tr vic nhn i tng thng bo cho n khi vng lp (run loop) nhn ri. Asynchronous functions Cc giao din h thng bao gm nhiu chc nng khng ng b cung cp tnh nng x l ng thi t ng. Cc API ny c th s dng trnh nn h thng v quy trnh hoc to ra cc ch ty chnh thc hin nhim v Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 56

Timers

Separate processes

ca h v tr li kt qu cho bn. (Vic thc hin thc t l khng thch hp bi v n c chia tch t m ca bn) Khi bn thit k ng dng ca bn, hy tm chc nng cung cp khng ng b v xem xt hnh vi s dng chng thay v s dng cc chc nng tng ng ng b trn mt si ty chnh. Timers c th c s dng trong thread chnh ca chng trnh thc thi cc tc v bit trc mt cch thng k. Mc d tiu tn ti nguyn hn so vi thread, to ra mt process ring bit c th c ch trong trng hp tc v ch lin quan tip tuyn n chng trnh. Process c th c s dng cho tc v i hi mt s lng ng k b nh hoc phi c thc hin bng cch s dng c quyn root.

Bng 1.5 Cc cng ngh c th s dng thay th thread trong ng dng c. H tr thread * Cc loi thread: Cng ngh Cocoa threads M t Cocoa thc thi thread s dng lp NSThread. Cocoa cng cung cp thm mt s phng thc trong lp NSObject to mt thread mi v thc thi code trn thread chy POSIX cung cp mt giao din da trn C cho vic to thread. y l la chn tt nht dnh cho ng dng khng phi l ng dng Cocoa. POSIX tng i n gin s dng v cung cp s linh hot phong ph cho cu hnh thread Cc dch v a x l l mt giao din da trn C c s dng bi ng dng chuyn t phin bn c ca Mac OS. Cng ngh ny ch c sn trong Mac OS X v nn trnh s dng. Thay vo , bn nn s dng lp NSThread hoc POSIX Bng 1.6 Cc loi thread cp ng dng, tt c cc thread hot ng v c bn ging nh trn cc nn tng khc. Sau khi bt u mt thread, thread trong mt trong ba trng thi chnh: chy, sn sng, hoc b chn. Nu thread khng phi ang chy, n hoc b chn Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 57

POSIX threads

Muiltiprocessing Services

v ch u vo hay n sn sng chy nhng cha c lp lch chy nh th no. Cc thread vn tip tc thay i trng thi cho n khi n thot ra v chuyn sang trng thi kt thc. *Run Loops: Run loop l mt phn ca c s h tng c s dng qun l s kin khng ng b trn thread. Mt run loop hot ng bng cch theo di mt hoc nhiu ngun s kin cho thread. Khi cc s kin xy ra, h thng nh thc thread v gi s kin ti run loop, m sau gi cho cc b qun l c ch nh. Nu khng c s kin c mt v sn sng c x l, run loop y thread vo trng thi sleep. Khng phi bt k mt thread mi no c to ra cng phi s dng run loop nhng lm vy c th cung cp mt kinh nghim tt hn cho ngi s dng. Run loop c th to ra thread c thi gian sng di m li dng s lng t nht ti nguyn. Bi v run loop t thread ca n vo trng thi ng khi khng c g lm, n gip loi b s lng ph CPU cycles v ngn cho b s l t ng chuyn sang trng thi ng v tit kim nng lng. cu hnh mt run loop, tt c nhng g phi lm l khi ng thread, c c mt tham chiu n cc i tng run loop, ci t b x l s kin, v cho run loop chy. C s h tng cung cp bi c Cocoa v Carbon x l cu hnh ca run loop ca thread chnh t ng. Nu mun to ra mt thread c thi gian sng di th hai cn phi t cu hnh run loop cho thread . * Cc cng c ng b ha: Mt trong nhng nguy c ca lp trnh thread l s tranh chp ti nguyn gia cc thread. Nu nhiu thread cng s dng hoc sa i cng mt ti nguyn ti cng mt thi gian, cc li c th xy ra. Mt cch gim nh li ny l loi b cc ti nguyn c chia s v chc chn rng mi thread c to mt ngun ti nguyn ring hot ng. Tuy nhin vic to ra cc ngun ti nguyn ring cho mi thread l khng bt buc, ngi lp trnh vn c th truy nhp ng b vo cc ti nguyn s dng k thut kha, iu kin, atomic operation v cc k thut khc. Kha gip bo v cho code ch c thc thi bi duy nht mt thread ti mt thi im. Loi kha ph bin nht l l kha loi tr ln nhau, cn c gi l mutex. Khi mt thread c gng c c mt mutex hin ti ang c mt thread khc gi, n s b block cho n khi kha c th ra bi thread kia. Mt s cc framework h thng cung cp h tr cho cc kha mutex, mc d u da trn cng ngh bn di Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 58

nh nhau. Ngoi ra, Cocoa cung cp mt vi bin th ca kha mutex h tr cc dng khc nhau ca hnh vi, nh quy. iu kin bo m ng trnh t cc tc v trong ng dng. Mt iu kin hot ng nh mt ngi gc cng, ngn chn mt thread nht nh cho n khi iu kin ca n tr thnh true. Khi iu xy ra, iu kin th thread ra v cho php n tip tc. Lp POSIX v framework Foundation u trc tip h tr iu kin Mc d kha v iu kin rt ph bin trong thit k ng thi, hot ng nguyn t l mt cch khc bo v v ng b ha truy cp d liu. Cc hot ng nguyn t cung cp cch thc thay th cn t ti nguyn hn kha trong cc tnh hung tnh ton ton hc hoc logic trn d liu v hng. Cc hot ng nguyn t s dng cc hng dn phn cng c bit m bo rng sa i cho mt bin c hon thnh trc khi thread khc c c hi truy cp n. *Interthread communication Mc d mt thit k tt gip gim thiu s lng giao tip cn thit, trong mt s trng hp, vic giao tip gia cc thread tr nn cn thit. Thread c th cn phi x l yu cu cng vic mi hoc bo co tin b ca mnh cho thread ca ng dng. Trong nhng tnh hung ny, cn phi c cachs c c thng tin t mt thread khc. May mn thay, thc t l cc thread chia s cng mt khng gian x l c ngha l c nhiu la chn cho giao tip gia cc thread. C nhiu cch giao tip gia cc thread, mi cch c u im v khuyt im ring ca n. Bng c ch giao tip sau ch ra nhng c ch giao tip gia cc thread thng dng nht c s dng trong Mac OS X C ch Gi thng ip trc tip M t Cc ng dng Cocoa h tr kh nng thc hin selectors trc tip t thread khc. Kh nng ny c ngha l mt thread v c bn c th thc thi mt phng thc trn bt k thread khc. Bi v chng u c thc hin trong bi cnh ca thread chnh, cc thng ip c gi theo cch ny s t ng c serialize trn thread . Bin ton cc, i tng Cch n gin khc truyn thng tin gia hai thread l v b nh chia s s dng mt bin ton cc, i tng chia s hoc b nh chia s. Bin chia s phi c bo v cn thn vi kha Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 59

hoc c ch ng b ha khc m bo tnh ng n trong code. Nu khng lm nh vy c th dn n li xy ra, lm hng d liu, treo d liu. iu kin iu kin l mt cng c ng b ha m bn c th s dng kim sot khi mt thread thc thi mt phn code c th. iu kin ging nh ngi gi ca, ch cho php mt thread chy khi cc iu kin c p ng. Ngun run loop Ngun run loop l mt trong nhng ty chnh m bn thit lp nhn cc thng ip t mt thread. Ngun run loop a thread vo trng thi sleep t ng khi khng c g lm nn gip ci thin hiu qu hot ng ca thread. Cng v socket Giao tip da trn cng l mt cch phc tp hn truyn thng gia hai thread, nhng n cng l mt k thut rt ng tin cy. Quan trng hn, cc cng v socket c th c s dng giao tip vi cc thc th bn ngoi, chng hn nh cc tin trnh v dch v khc. Cng c thc hin bng cch s dng cc ngun run loop, do , thread sleep khi khng c d liu i trn cng. Hng i thng ip Dch v a tin trnh nh ngha mt hng i tru tng vo trc ra trc (FIFO) qun l d liu vo v ra. Mc d hng i thng ip rt n gin v thun tin, chng khng hiu qu nh mt s k thut giao tip khc. Cc i tng phn tn Cc i tng phn tn l mt cng ngh Cocoa cung cp Cocoa mt thc hin cp cao da trn giao tip da cng. Mc d n c th s dng cng ngh ny giao tip interthread, lm nh vy l rt khng chi ph ln. Cc i tng phn tn ph hp cho giao tip vi cc tin trnh khc, khi m bn thn chi ph giao tip gia cc tin trnh cao ri. Bng 1.7 Giao tip gia cc thread 2. Qun l thread Mi tin trnh (ng dng) trong Mac OS X hay h iu hnh iPhone c to thnh t mt hoc nhiu thread. Mi ng dng bt u vi mt thread chy hm main ca ng dng. ng dng c th to thm cc thread thc thi code ca mt chc nng c th.

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

60

Khi ng dng to ra mt thread mi, thread tr thnh mt thc th c lp bn trong khng gian tin trnh ca ng dng. Mi thread c mt ngn xp thc thi ca ring mnh v c ht nhn lp lch cho runtime mt cch ring bit. Mt thread c th giao tip vi cc thread khc v cc qu trnh khc, thc hin hot ng vo ra, v lm bt c iu g khc ngi lp trnh cn n lm. Bi v cc thread trong cng mt khng gian tin trnh, tt c cc thread trong mt ng dng chia s cng b nh o v c quyn truy cp tng t nh chnh tin trnh. a. Chi ph s dng thread Chi ph s dng thread mang ngha l hiu sut v lng b nh s dng. Mi thread i hi phi c phn b b nh trong c khng gian b nh ht nhn v khng gian b nh chng trnh. Cc cu trc ct li cn thit qun l thread v phi hp lp lch ca n c lu tr trong ht nhn bng cch s dng b nh c dy. Stack v d liu ca thread c lu tr trong b nh ca chng trnh. Hu ht cc cu trc ny c to ra v khi to khi ln u to cc thread-mt qu trnh tn kh nhiu chi ph v nhng yu cu tng tc vi ht nhn. Bn sau ch ra chi ph xp x khi to mt thread trong ng dng Phn t Chi ph xp x Cu trc d ~ 1KB liu ht nhn Ghi ch b nh ny c s dng lu tr cc thuc tnh v cu trc d liu ca thread, phn ln c nh a ch nh l b nh c dy v do khng th c a vo a Stack 512KB - thread th Kch thc stack ti thiu c php ca thread cp th cp l 16 KB v kch thc stack phi l mt 8MB - main thread bi s ca 4 KB.B nh ny c t sang mt ca Mac OS X bn trong khng gian tin trnh ti thi im to 1 MB - main thread thread, nhng cc trang thc t kt hp vi b ca iPhone nh khng c to ra cho n khi chng c cn n Thi gian to ~ 90 micro giy Gi tr ny phn nh thi gian gia li gi khi thread to to ra cc thread v thi gian m ti thread bt u thi hnh. Con s minh ha ny c xc nh bng cch phn tch cc gi tr trung bnh v trung bnh c to ra trong qu trnh to ra thread trn mt iMac Intel-based vi b x l Core Duo 2 GHz v RAM 1 GB chy Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 61

Mac OS X v10.5. Bng 1.8 Chi ph s dng thread Chi ph khc cn xem xt khi lp trnh thread l chi ph sn xut. Thit k mt ng dng thread i khi c th yu cu thay i c bn n cch t chc cu trc d. Thc hin nhng thay i ny c th l cn thit trnh vic s dng ng b ha. Thit k cc cu trc d liu, v cc vn g li trong m thread, c th tng thi gian cn pht trin mt ng dng. Trnh nhng chi ph ny c th to ra vn ln hn thi gian chy nu phn ln thi gian ca thread l ch i trong trng thi kha v khng lm g c. b. To mt thread * S dng NSThread: C 2 cch to ra thread s dng lp NSThread: - S dng hm detachNewThreadSelector: toTarget: withObject - To mt i tng NSThread v gi hm start C hai k thut u to ra mt thread tch bit trong ng dng. Mt thread tch bit ngha l ti nguyn ca thread s c t ng pht hin v s dng bi h thng khi thread cn tn ti. N cng c ngha l code ca lp trnh vin s khng tc ng vo thread c na. V phng thc detachNewThreadSelector: toTarget: withObject: c h tr trong tt c cc phin bn ca Mac OS X, n c s dng rt ph bin trong cc ng dng Cocoa c s dng thread. detach mt thread mi, ch cn cung cp tn ca phng thc (xc nh bi selector) mun s dng nh l im vo ca thread, i tng nh ngha phng thc , v cc d liu mun truyn vo thread lc khi ng. V d nh to mt thread chy hm myThreadMainMethod ca chnh i tng hin ti, khng truyn d liu cho thread ht [NSThread detachNewThreadSelector:@selector(myThreadMainMethod:) toTarget:self withObject:nil]; Trc Mac OS X v10.5, lp NSThread c s dng to ra thread. Mc d c th nhn c mt i tng NSThread v truy cp mt s thuc tnh ca thread, Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 62

nhng iu ch c th lm c trong bn thn thread khi n chy. Trong OS X v10.5 Mac b sung h tr lm cho n c th lm v thit lp cc thuc tnh khc nhau thread trc khi bt u thread ny. N cng lm cho n c th s dng i tng thread tham chiu ti thread sau . Cch n gin khi to mt i tng NSThread trong Mac OS X v10.5 v sau l s dng phng thc initWithTarget: selector: object. Phng thc ny c nhng thng tin chnh xc ging nh phng thc detachNewThreadSelector: toTarget: withObject v s dng n khi to mt th hin NSThread mi. Nhng hm ny khng start mt thread. start thread, phi gi hm start ca i tng thread nh trong v d sau:NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadMainMetho d:) object:nil]; [myThread start]; // Actually create the thread

gi thng ip ti mt thread ang chy c th s dng phng thc performSelector: onThread: withObject: waitUntilDone. Phng thc ny l phng thc trong hu ht i tng ca Cocoa. Phng thc ny mi c gii thiu t Mac OS X v10.5 v l cch thun tin lin lc gia cc thread. *S dng POSIX Thread: Trong Mac OS X v iPhone OS c th to thread da trn ngn ng C bng cch s dng API thread POSIX. Cng ngh ny thc s c th c s dng trong bt k loi ng dng no (bao gm c Cocoa v cc ng dng Cocoa Touch) v s thun tin hn nu d nh vit phn mm cho nhiu nn tng khc nhau. Khi POSIX rountine s ng to thread: pthread_create. * S dng NSObject: Trong h iu hnh iPhone v k t Mac OS X v10.5, tt c cc i tng c kh nng to mt thread mi v s dng n thc hin mt phng thc ca mnh. Phng thc performSelectorInBackground: withObject to ra mt thread tch bit mi. V d, i tng myObj c phng thc doSomething m mun chy thread ngm, c th s dng on code sau:

Sinh vin thc hin: An Th Hng - Kha 50 - CNPM

63

[myObj performSelectorInBackground:@selector(doSomething) withObject:nil]; Phng thc ny c tc dng ging nh phng thc detachNewThreadSelector: toTarget: withObject ca lp NSThread vi i tng, selector, tham s hin ti. Thread ngay lp tc c cu hnh mc nh v bt u chy. d. Cu hnh cc thuc tnh ca thread Sau khi to ra mt thread, ngi lp trnh c th cu hnh li mi trng thread. * Kch thc stack ca thread: i vi mi thread mi c to ra, h thng cp pht mt lng b nh trong khng gian tin trnh hot ng nh l ngn xp ca thread . Ngn xp qun l stack frame v cc bin a phng ca thread c khai bo. Nu mun thay i kch thc ngn xp ca mt thread nht nh, phi lm nh vy trc khi to cc thread. Tt c cc cng ngh lp trnh thread u cung cp mt s cch thit lp kch thc stack mc d thit lp kch thc stack s dng NSThread ch c sn trong h iu hnh iPhone v Mac OS X k t vesion v10.5 tr v sau. Bng sau lit k cc ty chn khc nhau cho mi cng ngh. Cng ngh Cocoa Ty chn To mt i tng NSThread (khng s dng hm detachNewThreadSelector: toTarget: withObject). Trc khi gi hm start, s dng hm setStackSize thit lp kch thc stack mi To mt cu trc pthread_attr_t v s dng hm pthread_attr_setstacksize i kch thc mc nh ca stack. Truyn tham s vo hm pthread_create khi to thread Truyn kch thc stack vo hm MPCreateTask khi to thread. Bng 1.9 Cu hnh thread * B lu tr a phng ca thread Mi thread duy tr mt t in cp kha - gi tr c th c truy cp t bt c ni no trong thread ny. T in ny cng c th c s dng lu tr cc thng tin ty bin tn ti sut qu trnh thc hin thread. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 64

POSIX

Dch v a tin trnh

Cocoa v POSIX lu tr t in ca thread theo nhng cch khc nhau, nn khng th trn v kt hp cc li gi n hai cng ngh. Trong Cocoa, s dng phng thc threadDictionary ca i tng NSThread ly nhn c i tng NSMutableDictionary. T c th thm bt k kha no vo trong thread ca mnh. Trong POSIX, s dng chc nng pthread_setspecific v pthread_getspecific thit lp v nhn c cha kha v gi tr ca thread. * Thit lp priority ca thread: Vi i tng NSThread ca Cocoa s dng hm setThreadPriority. Vi POSIX thread, s dng hm pthread_setschedparam. e. Vit thread entry rountine * To Autorelease Pool: Cc ng dng xy dng trn cc framework ca Objective-C thng phi to t nht mt autorelease pool cho mi thread ca mnh. Nu mt ng dng s dng m hnh qun l, ni m ng dng x l s gi li v gii phng cc i tng autorelease pool gi tt c cc i tng c t ng gii phng t thread . Nu vit ng dng s dng m hnh qun l b nh, to ra mt autorelease pool l iu u tin phi lm trong thread entry routine. Tng t nh vy, hy autorelease pool ny l iu cui cng lm trong thread. Autorelease pool m bo rng cc i tng t gii phng c bt li, mc d n khng gii phng chng cho n khi thread t thot. Bi v cc autorelease cp cao nht khng c gii phng cc i tng ca n cho n khi thread thot ra, cc thread c thi gian tn ti di nn to thm autorelease pool gii phng cc i tng thng xuyn hn. Gii phng cc i tng thng gip cho b nh ca ng dng khng b phnh ra qu ln. *Thit lp b qun l ngoi l: Nu ng dng bt v x l cc trng hp ngoi l, m thread cn c chun b n bt k trng hp ngoi l c th xy ra. Mc d tt nht x l cc trng hp ngoi l l ngay im n c th xy ra, Khng bt c ngoi l trong thread c th khin ng dng b thot ra.