You are on page 1of 109

PHIU GIAO NHIM V N TT NGHIP

1. Thng tin v sinh vin H v tn sinh vin: .An Th Hng in thoi lin lc: 0984393387 Lp: CNPM Email: rosenangiyala@gmail.com 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

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

TM TT NI DUNG N TT NGHIP
Nhn 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

MC LC
PHIU 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.........................................................10
1.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.................................................................12


1.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......................................................................................32


1.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

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).........................................79
2.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)................................................81


2.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:.....................................................................................87
4.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...............................................................93


4.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:...................................................................................96


4.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:...........................................................................................100


4.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

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

DANH MC HNH
HNH 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

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 BNG
BNG 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

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

PHN I: NN TNG CNG NGH


CHNG 1: TM HIU MI TRNG LP TRNH TRN IPHONE 1.1 Tng quan v lp trnh trn di ng
1.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 iPhone


1.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: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com /DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleDisplayName</key> <string>${PRODUCT_NAME}</string> <key>CFBundleExecutable</key> <string>${EXECUTABLE_NAME}</string> <key>CFBundleIconFile</key> <string>icon.png</string> <key>CFBundleIdentifier</key> <string>com.yourcompany.${PRODUCT_NAME:identifier}</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>${PRODUCT_NAME}</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleResourceSpecification</key> <string>ResourceRules.plist</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>1.0</string> <key>LSRequiresIPhoneOS</key> <true/> </dict> </plist> 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 <Xcode>/Application vi <Xcode> 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 trnh


1.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 <Foundation/Foundation.h> @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 mng


C 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. Ci t mt final try/catch trong thread entry routine cho php nm bt bt k trng hp ngoi l no v a ra mt phn ng thch hp. *Thit lp mt run loop Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 65

C 2 la chn chy cc thread ring bit. La chn u tin l vit m cho mt thread nh l mt tch v lu di s c thc hin vi s gin on t hoc khng c, v thread thot ra khi tc v ny hon thnh. La chn th hai l a thread ca bn vo mt vng lp v c yu cu qu trnh t ng khi nhn c. La chn u tin khng yu cu ci t c bit g trong code. Vi la chn th hai, cn phi thit lp mt run loop cho thread. Mac OS X v h iu hnh iPhone cung cp built-in support thc thi run loop trong mi thread. Ca cao, Carbon, v UIKit bt u run loop ca main thread mt cch t ng, nhng nu to ra bt k mt thread th cp no, ngi lp trnh phi t thit lp run loop v t m n. f. Kt thc mt thread 3. Run loop Run loop l mt phn ca c s h tng c bn lin quan n thread. Mt run loop l mt vng lp x l s kin c s dng ln lch lm vic v phi hp cc s kin vo. Mc ch ca run loop l gi thread bn rn khi c nhng vic cn lm v a thread vo trng thi sleep khi khng c g lm. Run loop qun l khng hon ton t ng. Lp trnh vin vn phi thit k code cho thread bt u run loop vo cc thi im thch hp v p ng vi cc s kin n. C hai Cocoa v Core Foundation u cung cp cc i tng run gip cu hnh v qun l cc run loop. Mt ng dng mi khng cn phi to ra cc i tng ny mt cch r rng, mi thread, bao gm thread chnh ca ng dng, u c quan h vi mt run loop. Ch nhng thread th cp mi cn chy run loop mt cch r rng. Trong c hai ng dng Carbon v Cocoa, cc thread chnh s t ng thit lp v chy run loop ca n nh l mt phn ca qu trnh khi ng ng dng ni chung. a. Anatomy of a Run Loop Run loop l mt vng lp thread a vo chy b x l s kin nhm mc ch phn ng li cc s kin n. Phn code ca lp trnh vin cha cc cu lnh iu khin thc thi phn vng lp thc s ca run loop - ni cch khc, phn code ny cung cp vng lp while hay for dng iu khin run loop. Trong vng lp, s dng mt i tng run loop "chy" phn code x l s kin v gi b x l c ci t. Run loop nhn cc s kin t hai loi ngun khc nhau. Ngun input cung cp cc s Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 66

kin khng ng b, thng thng l cc thng ip t thread hoc ng dng khc. Ngun timer cung cp cc s kin ng b, xy ra ti mt thi im theo lch trnh hoc mt khong thi gian lp i lp li. C hai loi ngun s dng mt application specific handler routine x l s kin khi n n. Hnh sau cho thy cu trc l thuyt ca mt run loop v cc ngun ca n. Cc ngun input cung cp cc s kin khng ng b cho cc b x l tng ng v vi phng thc runUntilDate: thot ra. Ngun timer cung cp cc s kin thi quen x l , nhng khng lm run loop thot ra.

Hnh 1.14 Cu trc v ngun ca runloop

Ngoi vic x l ngun u vo, run loop cng to ra cc thng bo v hnh vi ca mnh. B quan st cc run loop ng k c th nhn c nhng thng bo ny v dng chng b sung cc x l cho thread. S dng Core Foundation ci t b quan st cc run loop ng k cho thread. b. Cc kiu run loop: Kiu run loop l tp hp cc ngun input v timer c theo di v thu thp bi b quan st run loop. Mi ln chy run loop, phi ch r kiu run loop. Trong sut qu trnh chy, ch cc ngun lin quan ti kiu mi c theo di v cho php nhn s kin. (Tng t nh vy, b quan st ch c lin quan ti kiu c thng bo v tin trnh ca run loop) Ngun thuc cc kiu khc gi cc s kin mi cho n khi c truyn cho mt vng lp kiu tng ng.

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

67

Cocoa v Core Foundation xc nh mt ch mc nh v mt s ch thng dng c biu din bng mt chui. Cc kiu run loop Kiu Mc nh Tn NSDefaultRunLoopMode (Cocoa) kCFRunLoopDefaultMode Foundation) NSConectionReplyMode (Cocoa) M t Kiu mc nh l kiu (Core c s dng nhiu nht. Cocoa s dng ch ny kt hp vi cc i tng NSConnection theo di cc tr li. Cocoa s dng ch ny nh ngha cc s kin dnh cho modal panel. Cocoa s dng ch ny gii hn cc s kin trong sut qu trnh ko chut . Ch thng dng

Kt ni

Modal

NSModalPanelRunLoopMode (Cocoa)

Theo du s NSEventTrackingRunLoopMode (Cocoa) kin

Ch NSRunLoopCommonModes (Cocoa) thng dng kCFRunLoopCommonModes (Core Foundation) Bng 1.10 Cc ch run loop

c. Khi no th s dng run loop Ch khi to ra cc thread th cp trong ng dng th mi cn chy run loop mt cch r rng. Run loop cho thread chnh ca ng dng l mt phn c s h tng quan trng. C Cocoa v Carbon cung cp m chy vng lp chnh ca ng ng v start vng lp t ng. Hm run ca UIApplication trong h iu hnh iPhone (hoc NSApplication trong Mac OS X) bt u vng lp chnh ca ng dng nh mt phn ca trnh t khi ng bnh thng. Tng t nh vy, hm RunApplicationEventLoop bt u vng lp chnh cho cc ng dng Carbon. Nu bn s dng cc project template ca Xcode to ra cc ng dng ca bn, bn khng bao gi phi gi cc hm ny. i vi thread th cp, lp trnh vin cn phi quyt nh khi no run loop cn thit v nu cn th phi t cu hnh v start n. Khng cn phi start run loop ca Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 68

thread trong mi trng hp. V d: nu bn s dng mt thread thc hin mt s tc v di hn v nh trc, bn c th trnh start run loop. Run loop c dnh cho cc tnh hung khi mun tng tc nhiu hn vi thread. V d, bn cn phi start mt run loop nh lm bt c iu g sau y: - S dng cng hay cc ngun u vo ty bin giao tip vi cc thread khc - S dng timer trn thread - S dng bt k mt phng thc performSelector no ca Cocoa - Gi cho thread thc thi mt tc v nh k no . d. S dng i tng run loop Mt i tng run loop cung cp giao din chnh cho vic thm cc ngun input, timer v b quan st run loop chy no. Mi thread c mt i tng run loop duy nht lin kt vi n. Trong Cocoa, i tng ny l mt th hin ca lp NSRunLoop. Trong ng dng Carbon hay BSD, n l mt con tr tr ti CFRunLoopRef. * Ly ra i tng run loop nhn c i tng run loop t thread hin ti, c th s dng mt trong cc cch sau: - Trong ng dng Cocoa, s dng hm currentRunLoop ca lp NSRunLoop nhn v i tng NSRunLoop - S dng hm CFRunLoopGetCurrent Tuy nhin, c th nhn c i tng CFRunLoopRef t i tng NSRunLoop khi cn thit thng qua hm getCFRunLoop ca lp NSRunLoop. Bi c 2 i tng u ch n 1 run loom nn c th kt hp c 2 cch gi ti i tng NSRunLoop v CFRunLoopRef khi cn thit. *Cu hnh mt run loop Trc khi chy run loop trn thread th cp, vic u tin cn lm l phi thm vo t nht mt ngun input hoc timer cho n. Nu run loop khng c bt c ngun no theo di, n s ngay lp tc thot ra khi lp trnh vin c gng chy n.

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

69

Ngoi vic ci t ngun cho run loop, lp trnh vin cn phi ci t b gim st run loop v dng n pht hin ra cc trng thi hot ng khc nhau ca run loop. ci t mt b gim st run loop, to mt i tng CFRunLoopObserverRef v s dng hm CFRunLoopAddObserver add n vo run loop ca mnh. 1.3.6. Core Audio Core Audio cung cp giao din phn mm thc hin cc tnh nng m thanh trong cc ng dng ca h iu hnh iPhone v Mac OS X. Core Audio x l tt c cc kha cnh lin quan ti m thanh trn mi nn tng ny. Trong h iu hnh iPhone, kh nng ca Core Audio bao gm ghi m, pht li, hiu ng m thanh, nh v, chuyn i nh dng, v phn tch file stream, cng nh l: - Mt equalizer v mixer tch hp sn m ngi dng c th s dng trong cc ng dng ca mnh - Truy cp t ng vo thit b vo / ra m thanh - L mt API qun l cc kha cnh m thanh ca cc ng dng trn thit b c th nhn cc cuc gi - Ti u ha ko di tui th pin m khng nh hng ti cht lng m thanh Core Audio kt hp giao din lp trnh C v Objective-C vi tch hp h thng, kt qu trong mt mi trng lp trnh linh hot c th duy tr tr thp thng qua cc chui tn hiu. Trong h iu hnh iPhone, bn s dng Core Audio trong ng dng Cocoa Touch. Trong Mac OS X, bn c th s dng Core Audio trong ng dng C, Objective-C, hoc C + +. 1. Core Audio l g? Core Audio l c s h tng m thanh k thut s ca iPhone OS v Mac OS X. N bao gm mt tp cc framework c thit k x l cc nhu cu m thanh trong ng dng ca bn. Core Audio c tch hp cht ch vo h iu hnh iPhone v Mac OS X nhm t hiu nng cao v tr thp. Trong Mac OS X, phn ln cc dch v Core Audio c xp l tng trn ca layer tru tng ca phn cng (Hardware Abstraction Layer - HAL) nh trong hnh di. Tn hiu m thanh vt qua n v i t phn cng thng qua HAL. C th truy Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 70

cp HAL s dng Cc dch v phn cng m thanh (Audio Hardware Services) ca Core Audio framework khi yu cu m thanh thi gian thc. Framework Core MIDI (Musical Instrument Digital Interface) cung cp giao din tng t lm vic vi d liu v thit b MIDI.

Hnh 1.15 Kin trc Core Audio ca Mac OS X

2 framework Audio Toolbox v Audio Unit cha cc dch v mc ng dng ca Core Audio: - Audio Queue Service: ghi m, pht li, tm dng, lp, v ng b ha m thanh. - S dng Audio File, Converter, Codec Services c v ghi ln a v thc hin bin i nh dng d liu m thanh.. Trong Mac OS X lp trnh vin cng c th t to ra cc codec ca ring mnh. - S dng Audio Unit Services v Audio Processing Graph Services (i din trong hnh l "Audio Unit") lu tr cc n v m thanh (audio plug-in) trong ng dng. Trong Mac OS X, cng c th to ra cc n v m thanh ty chnh s dng trong cc ng dng hoc cung cp s dng trong cc ng dng khc. - S dng Music Sequencing Services chi d liu m nhc da trn MIDI. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 71

- S dng Core Audio Clock Services cho s ng b ha m thanh v MIDI v qun l nh dng thi gian. - S dng System Sound Services (i din trong hnh l "System sounds") pht m thanh h thng v hiu ng m thanh. Core Audio trong h iu hnh iPhone c ti u ha cho cc ti nguyn my tnh c sn trong mt nn tng di ng chy bng pin. Khng c API cho cc dch v phi c qun l rt cht ch bi h iu hnh, c th l HAL v cc I / O Kit. Tuy nhin, c cc dch v b sung trong h iu hnh iPhone khng c trong Mac OS X. V d, Audio Session Service cho php qun l cc hnh vi m thanh ca cc ng dng ca bn trong bi cnh ca mt thit b c chc nng nh mt in thoi di ng v iPod. Hnh sau cung cp mt ci nhn cp cao ca kin trc m thanh trong h iu hnh iPhone.

Hnh 1.16. Kin trc Core Audio ca h iu hnh iPhone

2. C bn v Core Audio Apple thit k cc giao din phn mm cho Core Audio s dng phng php phn lp, cooperative v hng tc v. a. Cc tng kin trc giao din lp trnh API Giao din lp trnh cho Core Audio c chia thnh 3 lp : cc dch v lp cao, cc dch v lp trung v cc dch v lp thp. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 72

Hnh 1.17 Ba lp API ca Core Audio

Lp thp nht bao gm: - Cc b vo ra I/O tng tc vi cc driver - Tng tru tng ha phn cng m thanh (audio HAL) cung cp mt giao din c lp v phn cng v driver cho phn cng - Core MIDI cung cp s tru tng ca phn mm lm vic vi lung v cc thit b MIDI. - Host Time Services cung cp kh nng truy cp vo ng h ca my tnh Cc ng dng trong Mac OS X c th s dng trc tip cc cng ngh ny khi cn thc thi trong thi gian thc t hiu qu cao. Tuy nhin, nhiu ng dng audio khng truy cp lp ny. Tht vy, Core Audio trong h iu hnh iPhone cung cp nhiu cch t c m thanh thi gian thc bng cch s dng giao din cp cao hn. OpenAL, s dng trc tip I / O cho m thanh thi gian thc trong game. Kt qu nh n ng k, iu chnh API thch hp cho mt nn tng di ng.

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

73

Cc lp trung trong Core Audio bao gm cc dch v cho chuyn i nh dng d liu, c v ghi vo a, phn tch lung, v lm vic vi cc plug-ins. - Audio Converter Services gip ng dng lm vic vi b chuyn i nh dng d liu - Audio File Services h tr vic c v ghi d liu m thanh t file - Audio Unit Services v Audio Processing Graph Services gip ng dng lm vic vi digital signal processing (DSP) plug-n nh l equalizer hay mixer. - Audio File Stream gip phn tch lung, nh l play file c stream qua kt ni mng. - Core Audio Clock Services h tr ng b ha m thanh v MIDI cng nh l chuyn i thi gian. - Audio Format Services qun l nh dng d liu m thanh Core Audio trong h iu hnh iPhone h tr hu ht cc dch v ny nh trong hnh:

Hnh 1.18 Cu trc Core Audio ca h iu hnh iPhone

Lp cao nht trong Core Audio bao gm cc giao din kt hp cc tnh nng t cc lp thp hn.

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

74

- Audio Queue Services cho php ghi, chi, tm dng, lp, v ng b ha m thanh. - Lp AVAudioPlayer cung cp mt giao din Objective-C n gin chi v lp m thanh trong cc ng dng iPhone OS. Lp AVAudioPlayer x l tt c cc nh dng m thanh h tr trong h iu hnh iPhone, v gip thc hin cc tnh nng nh tua li v chuyn bi k tip. - Extended Audio File Services kt hp cc tnh nng ca Audio File Services v Audio Converter Services. N cung cp cho bn mt giao din thng nht cho vic c v ghi cc d liu m thanh khng nn v c nn. - OpenAL trong Core Audio thc hin cc chun OpenAL m ngun m cho vic nh v m thanh. b. Framework - Audio Toolbox framework cung cp giao din gia cc dch v thuc tng cao v tng trung trong Core Audio. Trong h iu hnh iPhone, framework ny cn bao gm c Audio Session Services qun l hnh vi ca m thanh trong ng dng chy trn iPhone v iPod. - Audio Unit framework: lm vic vi audio plug-in - AV Foundation framework: cha lp AVAudioPlayer, cc giao din stream cho audio playback. - Core Audio framework cung cp cc kiu d liu ca Core Audio cng nh l giao din cho cc dch v thuc tng thp. - OpenAL framework: lm vic vi OpenAL. c. Proxy Object Core Audio s dng khi nim proxy object i din cho cc tp tin, lung, audio player... V d, khi mun lm vic vi mt file m thanh c sn trong my, bc u tin l phi to th hin ca i tng AudioFileID. i tng ny c khai bo trong AudioFile.h. Sau , to file m thanh thc lin kt vi i tng thng qua hm AudioFileCreateWithURL. Hm ny s tr v mt nh x ti i tng file m thanh v ngi dng c th lm vic vi file m thanh thc thng qua vic giao tip vi i tng proxy.

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

75

d. Hm gi li Nhiu giao din Core Audio c th giao tip vi ng dng bng cch s dng hm gi li (callback). Core Audio s dng hm gi li cho nhng vic nh: - Cung cp mt tp d liu m thanh mi cho ng dng (chng hn nh ghi m; hm gi li s ghi d liu mi vo a). - Yu cu mt tp d liu m thanh mi t ng dng (chng hn nh pht li; hm gi li ca bn c t a v cung cp cc d liu). - Thng bo vi ng dng mt i tng phn mm thay i trng thi Mt cch hiu l hm gi li l o ngc quan im vv vic ai gi ai. Trong mt li gi hm bnh thng, chng hn nh AudioQueueNewOutput, ng dng s gi hnh vi c nh ngha bi Apple trong vic thc hin ca h iu hnh. Lp trnh vin khng bit, v khng cn bit, nhng g din ra bn di. ng dng yu cu mt i tng hng i m thanh chi li (playback audio queue) v nhn c mt i tng tr v. N hot ng bi v, trong khi thc hin li gi, lp trnh vin tun theo cc giao din hm quy nh trong file header ca hm . Trong trng hp hm gi li, h iu hnh s gi hnh vi m lp trnh vin thc thi trong ng dng ca mnh. Bng vic nh ngha mt hm gi li trong ng dng theo mt mu, h iu hnh c th gi n thnh cng. V d, Audio Queue Service quy nh c th mt mu cho mt hm gi li, m lp trnh vin c th thc hin, phn ng vi cc tin nhn m thanh, khi mt i tng hng i thay i thuc tnh. Template ca hm gi li ny c nh ngha trong AudioQueue.h: typedef void (*AudioQueuePropertyListenerProc) ( void * AudioQueueRef inUserData, inAQ, inID

AudioQueuePropertyID );

thc thi v s dng mt hm gi li trong ng dng cn phi lm hai vic:

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

76

- Thc thi hm gi li. - ng k hm gi li vi i tng mun tng tc vi.

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

77

CHNG 2: TNG QUAN V H THNG TM KIM MOBILE PORTAL 2.1 H thng Mobile Portal
H thng Mobile Portal l h thng cng tm kim thng tin trc tuyn c pht trin trn phc v cho nhu cu tm kim thng tin trn cc thit b di ng. H thng c chia ra lm 3 tng vi nhng chc nng v nhim v c th:

Tng ng dng (Cocoa Touch Application): y cng chnh l thnh phn chnh c tp trung trnh by trong n ny. Tng giao din di ng (Mobile Interface) Tng di cng l tng my tm kim socbay (Socbay Search Engine): c nghin cu v pht trin bi cng ty Naiscorp v i vo hot ng c hn 3 nm.

M hnh tng quan h thng c biu din nh hnh di:

Hnh 2.1 M hnh h thng Mobile Portal

Trong :

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

78

Socbay Search Engine: my tm kim ca socbay chu trch nhim thu thp d liu t cc ngun khc nhau trn internet. D liu c nh ch mc v lu tr trong c s d liu ca socbay. Tng ny c nghin cu v pht trin tng i hon thin bi cng ty Naiscorp Mobile Interface: tng Mobile Interface h tr cho vic chun ha d liu phc v cho in thoi di ng. Ngoi ra Mobile Interface cn qun l module giao tip cho php ly v tr d liu t my ch lu tr v cho ng dng Java khi nhn c yu cu t ng dng. Cocoa Touch Application: Tng Cocoa Touch Application c pht trin thnh mt ng dng chy trn in thoi di ng cho php giao tip vi ngi dng thng qua giao din ha ng dng

2.2 My tm kim Socbay (Socbay Search Engine)


Socbay l mt my tm kim vi y quy m v thun Vit c pht trin hon thin bi cng ty Naiscorp. M hnh my tm kim ca socbay hin nay c nhiu thay i v ci tin tuy nhin cc thnh phn chnh ca m hnh my tm kim vn l: crawler, indexer.

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

79

Hnh 2.1 M hnh n gin ca Socbay Search Engine

Crawler: Thnh phn ny ca h thng lm nhim v thu thp cc ngun d liu dng th t trn Internet, x l v lu tr vo Store server. D liu c th c ly t nhiu ngun khc nhau. Indexer: Thnh phn indexer lm cng vic nh ch mc d liu, x l d liu phc v cho thnh phn searcher. Searcher: Tm kim kt qu cho cu truy vn ca ngi dng da trn d liu c x l, v trong Ranking l vn rt quan trng phi c gii quyt. Tuy nhin d liu c th phc v cho cc thit b di ng, d liu cn phi c t chc li cho ph hp. Vai tr chnh ca my tm kim socbay trong h thng Mobile Portal: Thu thp d liu cho cc dch v trong h thng Phn tch truy vn ngn da trn thi quen ngi dng

2.3.1. Thu thp d liu cho cc dch v Cc dch v ang c cung cp ti ngi s dng ca Mobile Portal bao gm: MP3, hnh nh, thng tin rao vt, tin tc, thng tin a im, v t in. Cc d liu ny c ly t nhiu ngun khc nhau trn internet. Dch v MP3 M t Ngun d liu l t cc trang nghe nhc, hosting ph bin hin nay. S lng ln ti hng triu bi v lin tc c cp nht. H tr nhiu nh dng khc nhau ph bin hin nay nh JPEG, TIFF, BMP, PNG, GIF, v c resize ph hp vi kch thc mn hnh in thoi. D liu c ly t nhiu ngun khc nhau v c lc k. Cm nang t H thng hin nay mi dng li mc cung cp vn thng tin c sn cho ngi dng. Trong tng lai gn s Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 80

Hnh nh

c tch hp thm kh nng ng thng tin cho ngi dng Tin tc c tng hp t cc bo in t ph bin hin nay nh vnexpress, vietnamnet, dantri, . Vn cp nht thng tin lin tc v chng trng lp d liu c x l rt tt.

Thng tin a Cung cp thng tin v cc a im ph bin nh im karaoke, shop, caf, . Ngun d liu t cc trang cha d liu a im v cc trang ng thng tin a im. Trong tng lai dch v ny s c thm mc ch ng, tm ng, h tr GPS ti cc thnh ph ln cho ngi dng.

Truyn .

Mt kho cc truyn c c phn chia theo ch

Bng 2.1 Cc dch v 2.3.2 Phn tch truy vn ngn da trn thi quen ngi dng Search engine cho Mobile Portal l kt qu ca vic nghin cu thi quen ca ngi dng trn thit b di ng. Vic b hn ch v s lng phm bm v kh nng trnh din thng tin dn ti vic phi c mt c ch cho php hiu thng tin ngi dng nhp vo mt cch tt nht vi query c di ngn nht. y khng phi ch l vic chuyn cch s dng search engine t my tnh bn sang thit b di ng, l c vn khc yu cu phi c nghin cu nghim tc. H thng ng dng thnh cng kt qu ca vic nghin cu ny, ngi dng s c h tr trong vic tm kim thng tin vi nhng cu truy vn ngn nht nh: iphone hn, hay atm hcm, .

2.4 Tng giao din di ng (Mobile Interface)


Mobile Interface l thnh phn giao din trung gian gia my tm kim Socbay v ng dng di ng. Vai tr ca Mobile Interface trong h thng tm kim Mobile Portal l: Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 81

- Chun ha d liu cho thit b di ng - Qun l cc module kt ni 2.4.1 Qu trnh chun ha d liu cho thit b di ng: Vi nhng hn ch v mt hin th (kch thc mn hnh hin th b), v nhng hn ch v mt ng truyn kt ni (tc kt ni chm). D liu trn thit b di ng phi tht s ngn gn, sc tch nhng vn bao gm y cc thng tin cn thit. Vic chun ha d liu cho mi dch v trong h thng c m t nh sau: Dch v M t

Cm nang t Thng tin ht sc ngn gn, v nhanh chng ph vn hp vi thi quen ngi dng, gim thi gian ti d liu. Hnh nh c x l a lung nn vic load kt qu search bao gm cc hnh thumbnails l rt nhanh chng, lng d liu truyn ti cng gim ng k. Kch c hnh nh c nhiu dng ph hp vi cc mc ch khc nhau. Vi mi hnh ng ca ngi dng: search, preview, download th h thng s a ra hnh nh vi kch thc tng ng, tit kim ti a cho ngi dng. MP3 Kch thc ca tp tin cng c thay i ph hp vi nhu cu ca ngi dng. C hai ch c h tr l ti nhc cht lng cao v ti nhc cht lng thp. Phin bn nhc cht lng thp dnh cho mc ch lm nhc chung, gi MMS. Phin bn nhc cht lng cao dnh cho ngi mun s hu mt bn nhc chn thc hn. Ngoi ra phc v nhu cu nghe trc khi ti v, h thng h tr giao thc cho nghe th. Tin tc, a Nhu cu theo di thng tin vi thit b di ng im, Truyn dn n vic phi gii quyt bi ton trch chn thng tin. y chnh l vn quan trng nht i vi vic chun ha d liu cho thit b di ng, v nhm thnh Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 82

cng trong vic xy dng h thng ny.

2.4.2 Thit k module kt ni ti client v server Mobile Interface c chia lm 2 module ti client v server. Module trn server l mt Interface s to mt socket, lng nghe nhng packet t client gi ln, x l, lu log, sau da vo m gi ln gi cc service c cung cp bi Search Engine ca trang Socbay.com sau khi c chun ha d liu ph hp vi cc thit b di ng. Module trn client c nhim v qun l cc packet gi i, nhn v phn phi cc gi tin gi v t server v phn phi cho cc form pha client. Hai module trn pha client v server s to kt ni gia trn giao thc kt ni socket TCP v lun c gi n nh trong sut qu trnh client c bt. im c bit trong kt ni ny l to c Mobile streaming cho dch v mp3, cho php client c th chi nhc trc tuyn vi cht lng n nh.

2.5 ng dng Petto


Petto l ng dng pha client chy trn mi trng in thoi. ng dng c tch hp nhiu dch v nh nghe nhc, hnh nh, tin tc, a im, truyn, cm nang t vn v trong tng lai c th m rng thm nhiu dch v khc. Vic pht trin ng dng phia client ny l trng tm chnh ca n v s c trnh by chi tit hn trong phn II ca n.

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

83

PHN II: XY DNG CHNG TRNH


CHNG 3: NG DNG TRN IPHONE 3.1 Cc loi ng dng trn iPhone
Cc ng dng trn iPhone c chia lm 3 loi - Immersive Application: cc ng dng mang tnh gii tr (game). - Productivity Application: Cc ng dng sn phm gip qun l thng tin v hon thin cc tc v. Thng tin c t chc theo cy phn cp v ngi dng c th di chuyn qua li gia cc mc. ng dng Petto c xy dng trong n ny l mt ng dng thuc loi ny. - Utility Application: cc ng dng tin ch, hin th mt tp cc c t ca thng tin cho ngi dng. Mn hnh hin th n gin v t tng tc. V d nh cc tin ch thi tit, xem lch trn iPhone.

3.2 Pht biu bi ton


Tm kim di ng l mt dch v gip ngi s dng tm kim thng tin trn in thoi di ng v cc thit b khng dy. Dch v ny cho php ngi s dng c th tra cu, c cc thng tin trn cc trang web di ng mi lc mi ni. Mc tiu ca dch v tm kim di ng l p ng ti a nhu cu tm kim ca ngi dng mi lc mi ni. p dng cng ngh tm kim thng thng trn my tnh bn vo nn tng di ng. ng dng tm kim trn in thoi di ng Mobile Search ca Socbay l mt sn phm kh thnh cng nhng mi ch s dng c trn cc dng in thoi chy Java. K t khi ra mt nm 2007 n nay, iPhone vn lun l mt hin tng v cng l sn phm di ng i u v cng ngh. Mong mun a ng dng tm kim trn in thoi ln iPhone nn ng dng Petto c xy dng. ng dng bao gm cc dch v - Tin tc: cho php xem danh mc cc tin tc chia theo ch v xem chi tit ca cc tin tc . - Truyn: c truyn Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 84

- a im: xem thng tin v cc a im - Cm nang t vn: cha cc thng tin hu ch v vn ha - x hi - Hnh nh - Nhc MP3

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

85

CHNG 4: XY DNG CC DCH V TM KIM A PHNG TIN DA TRN MY TM KIM SOCBAY 4.1 Xc nh yu cu h thng:
Cc chc nng chnh ca h thng c miu t nh hnh di:

Hnh 4.1 Usercase tng th ca h thng

* Chc nng Tin tc: - Xem tin tc theo chuyn mc - Xem chi tit tin * c truyn - c truyn theo chuyn mc Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 86

* a im - Tm kim a im - Xem a ch v gii thiu v a im * Cm nang t vn - c cc thng tin t vn * Hnh nh - Xem trc hnh - Xem hnh vi kch thc tht * Nhc Mp3 - Chn nhc theo ch - Nghe nhc

4.2 c t user case:


4.2.1. Tin tc Tc nhn (actors) M t iu kin u vo Kt qu u ra Lung s kin

Ngi s dng Use case cho php ngi s dng c tin tc theo chuyn mc v c tin chi tit Khng Hin th tin theo chuyn mc, hin th tin chi tit TT . . Tc nhn 1 Ngi dng 2 thng H Hnh ng Chn chuyn mc hay tin chi tit cn xem - Gi mt request ln server ly thng tin v - Bt cc ngoi l nu xy ra - X l d liu nhn c t my

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

87

ch trc khi hin th Lung khc s kin Nu khng ly c d liu v s hin th thng bo cho ngi dng

Cc yu cu c - Khi ngi dng yu cu xem mt chuyn mc, request bit gi ln server s ly v v hin th 10 kt qu. Nu ngi dng mun xem thm mi tip tc gi request ln server ly tip 10 tin tip theo. Uses Extends Khng Khng Bng 4.2 c t usercase dch v Tin Tc 4.2.2. c truyn Tc nhn (actors) M t iu kin u vo Kt qu u ra Lung s kin

Ngi s dng Use case cho php ngi s dng tm kim truyn theo ch v c ni dung ca truyn m ngi dng chn Khng Hin th truyn theo ch , hin th ni dung truyn TT . . Tc nhn 1 Ngi dng 2 thng H Hnh ng Chn ch hay truyn c th mun xem - Gi mt request ln server ly thng tin v - Bt cc ngoi l nu xy ra - X l d liu nhn c t my ch trc khi hin th

Lung khc

kin

Nu khng ly c d liu v s hin th thng bo cho ngi dng

Cc yu cu c - Khi ngi dng yu cu xem mt ch , request gi bit ln server s ly v v hin th 10 kt qu. Nu ngi dng mun xem thm mi tip tc gi request ln server ly tip Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 88

10 tin tip theo. Uses Extends Khng Khng Bng 4.3 c t usercase dch v Truyn 4.2.3. a im Tc nhn (actors) M t iu kin u vo Kt qu u ra Lung s kin

Ngi s dng Use case cho php ngi s dng tm kim a im theo ch , xem thng tin ca a im c th Khng Hin th a im theo ch , hin th thng tin ca a im c th TT Tc nhn Hnh ng . . 1 Ngi dng 2 thng H Chn ch hay a im c th cn xem thng tin - Gi mt request ln server ly thng tin v - Bt cc ngoi l nu xy ra - X l d liu nhn c t my ch trc khi hin th

Lung khc

kin

Nu khng ly c d liu v s hin th thng bo cho ngi dng

Cc yu cu c - Khi ngi dng yu cu xem mt chuyn mc, request bit gi ln server s ly v v hin th 10 kt qu. Nu ngi dng mun xem thm mi tip tc gi request ln server ly tip 10 tin tip theo. - Khi ngi dng tin su ti mc hin th ln danh sch cc a im thuc ch no , di phn tn a im s c mt ch con cha mt s thng tin c bn v a ch ca a Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 89

im ngi dng khng nht thit phi xem chi tit v a im. Uses Extends Khng Khng Bng 4.4 c t usercase dch v a im 4.2.4. Cm nang t vn Tc nhn (actors) M t iu kin u vo Kt qu u ra Lung s kin

Ngi s dng Use case cho php ngi s dng c thng tin theo chuyn mc v c chi tit thng tin t vn Khng Hin th thng tin theo chuyn mc, hin th chi tit thng tin t vn TT Tc nhn Hnh ng . . 1 Ngi dng 2 thng H Chn chuyn mc hay tin chi tit cn xem - Gi mt request ln server ly thng tin v - Bt cc ngoi l nu xy ra - X l d liu nhn c t my ch trc khi hin th

Lung khc

kin

Nu khng ly c d liu v s hin th thng bo cho ngi dng

Cc yu cu c - Khi ngi dng yu cu xem mt chuyn mc, request bit gi ln server s ly v v hin th 10 kt qu. Nu ngi dng mun xem thm mi tip tc gi request ln server ly tip 10 tin tip theo. Uses Khng

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

90

Extends

Khng

Bng 4.5 c t usercase dch v Cm nang t vn 4.2.5. Hnh nh Tc nhn (actors) M t iu kin u vo Kt qu u ra Lung s kin

Ngi s dng Use case cho php ngi s dng xem cc ch nh, danh mc cc nh km hnh xem trc, xem hnh nh ng kch c Khng Hin th nh theo ch , hin th nh xem trc, hin th nh ln TT Tc nhn Hnh ng . . 1 Ngi dng 2 thng H Chn ch hay nh mun xem - Gi mt request ln server ly thng tin v - Bt cc ngoi l nu xy ra - X l d liu nhn c t my ch trc khi hin th: tch phn thng tin nh ra khi cc thng tin khc, khi phc li nh ban u.

Lung khc

kin

Nu khng ly c d liu v s hin th thng bo cho ngi dng

Cc yu cu c - Khi ngi dng yu cu xem mt chuyn mc, request bit gi ln server s ly v v hin th 10 kt qu. Nu ngi dng mun xem thm mi tip tc gi request ln server ly tip 10 tin tip theo. - Vi cc nh ln hn kch thc mn hnh, thu nh nh Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 91

li cho va vi kch thc mn hnh Uses Extends Khng Khng Bng 4.6 c t usercase dch v Hnh nh

4.2.6. Nhc MP3 Tc nhn (actors) M t iu kin u vo Kt qu u ra Lung s kin

Ngi s dng Use case cho php ngi s dng xem danh mc cc bi nhc theo ch , ngi s dng c th chn nghe mt bi nhc Khng Hin th kt qu tm kim TT . 2 H thng . Tc nhn 1 Ngi dng Hnh ng Chn bn nhc, sau n nt chi nhc H thng khi to b chi nhc H thng gi yu cu chi nhc n my ch H thng nhn thng tin di dng cc gi tin t my ch tr v 3 Ngi dng Nhn vo v tr bt k seek trn thanh ch lng nhc c ly v chuyn ti v tr bt k trong bi nhc H thng kim tra nu v tr seek ca ngi dng nm trong khong nhc c ly v th cho php chuyn n v tr cn khng th khng cho php. 92

4 H thng

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

Lung khc

kin

Li v ng dn : H thng hin th thng bo li trong trng hp h thng khng tm thy ng dn file hin ti.

Uses Extends

Khng Khng Bng 4.7 c t usercase dch v Nhc MP3

4.3 Cc vn k thut, thut ton


4.3.1. Vic kt ni, truyn nhn d liu gia client v server: Vn t ra khi to ng dng l lm sao c th to mt kt ni gia client (iPhone) v server (my tm kim Socbay). iPhone SDK cung cp mt s cch: - Download d liu trc tip t URL - S dng giao thc HTTP gi yu cu ln server v nhn d liu v theo kiu khng ng b. - S dng Socket * Download d liu trc tip t URL: y l cch n gin nht nhn d liu t web server. S dng mt lp c phng thc khi to (init) c tn cha withContentsOfURL: y l cc phng thc c bit s x l tt c cc vic nhn d liu t Internet. Tt c nhng g phi lm l truyn cho phng thc ny mt i tng NSURL cha url v n s to v tr v mt i tng cha d liu ca url. Tuy nhin, qu trnh x l theo cch ny l ng b ha, tc l khi hm withContentsOfURL c gi, chng trnh s b dng ch cho n khi n hon thnh vic download d liu. Vi cc d liu nh th y khng phi l vn , nhng vi cc d liu ln th n s dn ti vic ngi dng khng th tng tc vi ng dng cho n khi d liu c nhn v ht. * S dng giao thc HTTP: gi trc tip n cc service. Cch ny s ly d liu theo kiu khng ng b, ng thi bt c cc li xy ra. Nh vy khc phc c nhc im ca vic download trc tip t URL. Tuy nhin, vi giao thc HTTP, mi ln ngi dng mun thc hin mt request ln server s phi mt thi gian to li kt ni, lm chm ng dng. N cng khng th khng ch c lung d liu gi ln v tr v nh s dng kt ni socket. Hn na l tnh trong sut ca ng dng client Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 93

vi cc service cung cp bi Socbay Search Engine. Thng thng, nhng service nh vy thng c gi trong sut vi tt c cc client m bo tnh bo mt v c kh nng thay i khi cn thit. Vic gi trc tip n nhng server ny s khng an ton, v trong trng hp mun bo tr v thay i s lm nh hng n ton b h thng. * S dng socket: ngi lp trnh c th iu khin c vic truyn nhn d liu theo kiu ng b hay khng ng b, ng thi kim sot c lung d liu gi ln v tr v. Vi cch thc ny th phi xy dng 2 module client v server. Module client cc trch nhim to thread x l cc d liu tr v t server. Module server c trch nhim lng nghe nhng gi tin c gi ln t client, x l, sau gi v ly thng tin t service c cung cp bi Socbay Search Engine v tr li cho client. 4.3.2. Hin th Khi gi yu cu ly chuyn mc ln server, server s tr v danh sch cc chuyn mc tng ng. Yu cu t ra l khi ngi dng chn mt chuyn mc, ngi dng c th vo cc chuyn mc con ca chuyn mc , hoc nu chuyn mc khng cn chuyn mc con th s hin th thng tin chi tit ca n. Cc chuyn mc c t chc phn cp, ngi dng c kh nng la chn i su xung cc mc di thp hay tr li cc mc trn cao. Nh vy ng dng cn mt navigation chuyn i gia cc mc. i vi cc chuyn mc, do l hin th mt danh sch, cho php ngi dng chn mt phn t trong danh sch . Mi phn t ca chuyn mc cn c tiu (ca chuyn mc con hay tin chi tit), nh preview, thng tin b sung. Rt may l iPhone SDK cung cp i tng UITableView p ng c cc yu cu ny. i vi vic hin th chi tit. Do thng tin tr v c th l cha text, text km hnh nh, hay hnh nh.. nn cn mt i tng cho php hin th c text v hnh nh, c kh nng ty bin cho php ngi dng iu khin vic hin th. UIWebView c s dng 4.3.3. MP3 streaming Vi tc v MP3 streaming th kh l khc so vi cc dch v khc. Khng phi l ch gi request ln server, nhn v v hin th ra, vi MP3 streaming th cn cn phi chuyn d liu nhn c t server v thnh cc packet m thanh c th pht li ngay m khng cn phi download ton b bi ht v. Qu trnh streaming MP3: - Gi request ln server v nhn d liu tr v l dy cc byte

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

94

- S dng dch v Audio File Stream phn tch dy byte nhn v, tp hp li thnh cch gi m thanh. - Cc gi m thanh c ln lt y vo mt buffer - Khi buffer y, buffer ny s c a vo mt hng i chun b pht li. - Vi hng i buffer, n s y cc buffer cho i tng AVAudioPlayer pht li, sau mt buffer c pht li, n gii phng ht d liu ang gi v quay tr li ch nhn d liu mi. - Nu d liu gi v qu nhanh, AVAudioPlayer khng kp x l ht, th cc gi m thanh s phi i khi c buffer trng c y vo, v cc buffer th phi xp hng ln lt n khi mnh c pht li.

Hnh 4.2 MP3 Streaming

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

95

4.4 Thit k giao din:


4.4.1. Giao din chnh:

Hnh 4.3 Giao din chnh ca ng dng

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

96

4.4.2. Dch v Tin Tc:

Hnh 4.4 Giao din chnh ca dch v Tin Tc

4.4.3. Dch v Truyn:

Hnh 4.5 Giao din chnh ca dch v Truyn

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

97

4.4.4. Dch v a im:

Hnh 4.6 Giao din chnh ca a im

4.4.5. Dch v Cm Nang T Vn:

Hnh 4.7 Giao din chnh ca dch v Cm Nang T Vn

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

98

4.4.6. Dch v Hnh nh:

Hnh 4.8 Giao din chnh ca dch v Hnh nh

4.4.7. Dch v Nhc MP3:

Hnh 4.9 Giao din chnh ca dch v Nhc MP3

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

99

4.5 Thit k lp:


4.5.1. Tng Cocoa Touch Application

Hnh 4.10 Biu lp ca tng ng dng Cocoa Touch

thy r cc thuc tnh v phng thc ca cc lp, biu lp s c chia nh thnh cc phn. Nhm mc ch n gin ha nn cc lin kt vi cc phn khc s c gin lc i. V v cc lp c xy dng kh l tng ng nhau nn em xin php ch trnh by cc lp ng dng v cc lp trong dch v Tin Tc v Nhc MP3 1. Lp ng dng:

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

100

Hnh 4.11 Biu lp ca lp ng dng

- Lp ApplicationDelegate c nhim v nhn cc s kin lin quan ti vng i ca ng dng v p ng li cc s kin ny + applicationDidFinishLauching: s kin ny xy ra ngay sau khi khi u ng dng + applicationWillTerminate: s kin ny xy ra ngay trc khi ng ng dng - Lp MainViewController: hin th giao din chnh ca chng trnh, ty thuc vo la chn ca ngi dng m chuyn n chc nng tng ng. + Khi ng dng c m ra, lp MainViewController c khi to, to ngay mt kt ni socket ti server. + Ty thuc vo la chn ca ngi s dng chuyn n chc nng tng ng. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 101

2. Dch v Tin Tc:


class Dich v u Tin Tuc

TinTucChuyenMuc View Controller + *socket: Socket *spinner: UIActivityIndicatorView *tinTucController: NSMutableArray parent_id: UInt32 start: UInt32 numGet: UInt32 connectSocketWithParameter(UInt32, UInt32, UInt32) : void parserIntToCharArray(UInt32) : char* reloadTableData(NSNotification*) : char*

TinTucTinMoi View Controller # # # + cate_id: UInt32 key: UInt32 socket: Socket* spinner: UIActivityIndicatorView* start: UInt32 tinMoiController: NSMutableArray* numGet: UInt32 connectSocketWithParameter(UInt32, UInt32, UInt32, UInt32) : void parserIntToCharArray(UInt32) : char* createRequestData() : char* reloadTableData(NSNotification*) : void scrollViewDidEndDecelerating(UIScrollView*) : void viewDidLoad() : void numberOfSectionsInTableView(*UITableView) : NSInteger tableView:cellForRowAtIndexPath(NSInteger, UITableView*)

TinTucChiTiet View Controller + socket: Socket* spinner: UIActivityIndicatorView* item_id: UInt32 webView: UIWebView* connectSocketWithItem_id(UInt32) : void reloadData(NSNotification*) : void parserIntToCharArray(UInt32) : char* createRequestData() : char* viewDidLoad() : void dealloc() : void

Hnh 4.12 Biu lp ca dch v Tin Tc

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

102

- Lp TinTucChuyenMucViewController: hin th danh sch cc chuyn mc c chuyn mc con. + Mi khi mt i tng ca lp TinTucChuyenMucViewController c khi to, i tng s gi mt request ln server thng qua hm connectionSocketWithParameter vi cc tham s truyn vo ch r yu cu chuyn mc thuc chuyn mc cha no, ly bao nhiu phn t, bt u t phn t no. - Lp TinTucTinMoiViewController: hin th danh sch cch chuyn mc khng c chuyn mc con. - Lp TinTucChiTietViewController: hin th tin tc chi tit.

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

103

3. Dch v nhc MP3


class Dich v u nhac MP3

MP3ChuyenMuc View Controller + socket: Socket* mp3ChuyenMucViewController: NSMutableArray* spinner: UIActivityIndicatorView* parent_id: UInt32 numGet: UInt32 start: UInt32 connectSocketWithParameter(UInt32, UInt32, UInt32) : void parserIntToCharArray(UInt32) : char* scrollViewDidEndDecelerating(UIScrollView*) : void createRequestData() : char* reloadTableData(NSNotification*) : void viewDidLoad() : void numberOfSectionsInTableView(UITableView*) : NSInteger dealloc() : void

MP3Player + + + + button: UIButton* volumeSlider: UIView* positionLabel: UILabel* durationLabel: UILabel* progressSlider: UISlider* streamer: AudioStreamer* progressUpdateTimer: NSTimer* urlString: NSString * buttonPressed(id) : IBAction spinButton() : void updateProgress(NSTimer*) : void sliderMoved(UISlider*) : IBAction setButtonImage(UIImage*) : void createStreamer() : void destroyStreamer() : void viewDidLoad() : void playbackStateChanged(NSNotification*) : void dealloc() : void

MP3DanhSach View Controller + socket: Socket* mp3DanhSachController: NSMutableArray spinner: UIActivityIndicatorView* key: UInt32 cate_id: UInt32 bitRate: UInt32 dataOffset: NSInteger fileLength: NSInteger seekByteOffset: NSInteger audioDataByteCount: UInt64 processedPacketsCount: UInt64 processedPacketsSizeTotal: UInt64 seekTime: double sampleRate: double packetDuration: double lastProgress: double connectSocketWithKey(UInt32, UInt32) : void parserIntToCharArray(UInt32) : char* createRequestData() : char* reloadTableData(NSNotification) : void viewDidLoad() : void dealloc() : void

AudioStreamer + + + + + + + + + + url: NSURL* audioQueue: AudioQueueRef audioFileStream: AudioFileStreamID asbd: AudioStreamBasicDescription internalThread: NSThread* audioQueueBuffer: AudioQueueBufferRef[] packetDescs: AudioStreamPacketDescription[] fillBufferIndex: unsigned int bytesFilled: size_t packetsFilled: size_t inuse: bool[] buffersUsed: NSInteger httpHeaders: NSDictionary* state: AudioStreamerState stopReason: AudioStreamerStopReason errorCode: AudioStreamerErrorCode err: OSStatus discontinuous: bool queueBuffersMutex: pthread_mutext_t queueBufferReadyCondition: pthread_cond_t notificationCenter: NSNotificationCenter* initWithURL(NSURL*) : id start() : void pause() : void stop() : void isPaused() : BOOL isIdle() : BOOL isWaiting() : BOOL isPlaying() : BOOL seekToTime(double) : void calculatedBitRate() : double

MP3TinTuc View Controller + socket: Socket* spinner: UIActivityIndicatorView* item_id: UInt32 webView: UIWebView* connectSocketWithItem_id(UInt32) : void reloadData(NSNotification*) : void parserIntToCharArray(UInt32) : char* createRequestData() : char* viewDidLoad() : void dealloc() : void

Hnh 4.13 Biu lp ca dch v Nhc MP3

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

104

4.5.2. Tng Mobile Interface:


class MobileInterfaceClass

Socket + + + + writeStream: CFWriteStreamRef readStream: CFReadStream packetArray: NSMutableArray* initWithNoData() : void startStreamToHost(int, NSString*) : void startWriteStreamWithCode(UInt8*, char*, UInt8*, int, char*) : void destroySocketConnection() : void readStreamCallback(void*, CFStreamEventType, CFReadStreamRef) : void dealloc() : void

Packet + + + + + + + + + packetHeader: RequestHeader_t* packetData: char* packetBytesArray: UInt8* image: UInt8* image_length: UInt32 allocateHeader() : void packetSetHeaderData(UInt8*) : void allocatePacketBytesArrayWithDataLength(unsigned int) : void copyCharBytesToBuffer(int, int, int, UInt8*, UInt8*) : void copyIntBytesToBuffer(int, int, int, UInt8*, UInt8*) : void createClientRequestWithCode(int, char*, UInt8*, UInt8*, int, char*) : void analyzePacketDataToCategoryReceiveData(CategoryReceive_t) : void analyzePacketDataToSearchResultReceiveData(SearchResultReceive_t) : void analyzePacketDataToDetailReceiveData(DetailReceive_t ) : void

Hnh 4.14 Biu lp ca tng Mobile Interface

- Lp Socket c nhim v to mt kt ni socket ti server, gi request ln server v nhn v tr li ca server. - Lp Packet cha thng tin v mt gi thng tin tng ng vi mt request ca client hay mt tr li ca server. Vi tr li ca server, lp packet s nhn nhim v phn tch d liu ly v thnh thng tin hu ch c th hin th ln mn hnh.

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

105

4.5.3. Quan h gia tng Mobile Interface v Cocoa Touch Application: Mi lp ca tng Cocoa Touch Application u cha mt bin thnh phn l th hin ca lp Socket, v mt mng cha cc th hin ca lp Packet thuc tng Mobile Interface.

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

106

TNG KT NH GI
1. Mt s kt qu t c
V c bn tm hiu c nhng kin thc c bn nht v mi trng lp trnh cho in thoi iPhone. Hiu c cu trc mt chng trnh ng dng trn iPhone v c th t xy dng mt chng trnh ca ring mnh. ng dng Petto c xy dng tng i hon thin vi cc chc nng c t ra. Mt s u im ca ng dng Giao din bt mt ngi s dng. Cung cp cho ngi dng nhiu dch v c th chn la C kh nng hin th ting Vit.

ng dng c kh nng tch hp nhanh chng i vi cc dch v tm kim, hoc cc dch v gi tr gia tng mi (nh nhn tin)

2 Nhc im
Tuy c gng hon thin sn phm mc tt nht tuy nhin ng dng khng trnh khi nhng mt hn ch: D liu c chun ha cho thit b di ng cng khng trnh khi sai st. Vic s dng socket v stream trao i d liu gia client v server c thit lp v bt c cc li c bn nh khng c kt ni mng, kt ni v truyn nhn d liu sai.. nhng vn cha bt c time out. Nu nh vic kt ni socket thnh cng nhng nu qu trnh truyn nhn d liu qu lu, ng dng vn cha c cch x l. Vic tm kim mi ch dng mc tnh, tc l ngi dng ch c th la chn trn danh sch cc mc hin th ra. V d nh dch v tin tc, ngi dng mun xem thng tin trong mc tin mi nht, chng c cch no khc l phi t tm trong danh sch cc chuyn mc hin th ra. Cha c chc nng cho ngi dng nhp t kha vo v tm kim. Sinh vin thc hin: An Th Hng - Kha 50 - CNPM 107

Dch v nh, nghe nhc MP3 cha cn cha c chc nng download.

3 Hng pht trin:


Trong thi gian ti, ng dng s tp trung vo vic nng cp cc tnh nng hin c, gii quyt cc vn cn tn ti, b sung cc tnh nng mi c th p ng c nhu cu ca th trng. B sung thm dch v chng khon, bng . Cho php ngi dng kh nng tng tc vi h thng nh upload thng tin rao vt, upload hnh nh, nhc. Nghin cu, ci tin tnh nng chi nhc ca ng dng, tin ti vic cho xem video online trn mi trng thit b di ng. Cho php ngi dng download nhc, hnh nh

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

108

TI LIU THAM KHO


1. iPhone Developer: http://developer.apple.com/iphone/index.action ca Apple 2. Dave Mark| Jeff LaMache, Beginning iPhone 3 Development - Exploring the iPhone SDK , Appress,2009 3. Dave Mark| Jeff LaMache, More iPhone 3 Development - Tackling iPhone SDK 3 , Appress,2009 4. Jonathan Zdziarski, iPhone SDK Application Development, 1st Edition, OReilly Media, Inc, 2009. 5. James A.Brannan, iPhone SDK Programming - A Beginnings Guide, McGraw-Hill, 2010. 6. Jiva DeVoe, Cocoa Touch for iPhone OS 3, Wiley Publishing, Inc, 2009

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

109

You might also like