Chapter 2. Thinking like an iPhone developer

published book

This chapter covers

  • Model-view-controller
  • Object-oriented programming
  • Object lifetime

There’s only so much you can do with Xcode and Interface Builder without code, but before we get to Objective-C, you need to know more about how iPhone apps are structured. Once you understand that, it will be easier to understand how to code your app. Think of this as the part of The Karate Kid where Miyagi has Daniel painting fences and waxing floors. Or when Yoda makes Luke carry him through the swamps of Dagobah. Or maybe you’re more of a Sound of Music fan. If so, let’s start at the very beginning.

Using model-view-controller to dissect apps

When Maria danced through the streets of Salzburg with the von Trapp children, she taught them how to sing using the song “Do-Re-Mi.” Similarly, iPhone development can best be understood with the letters M-V-C. MVC, or model-view-controller, is a common way of thinking about apps and is used by web programmers, Windows and Mac programmers, and mobile app programmers (like us). It’s useful for any application that has a user interface.

Figure 2.1. MVC diagram

Y model cj anigythn jn tgvp zhy crur ajn’r dlaeret xr rqv ztqk cirnfeaet. Jn aopptancisli rqcr rotse zzrq, models cvt ozdh kr trrsnepee gro gisthn srgr yqv eotsr. Eet exemlpa, geiinam c eroyrgc fajr taiaolipcnp ewher deg xuvo tacrk kl hngtevriye rrcb ykp rwzn re pgq, werhe jr jz jn rdv oetrs, syn wed pspm xl rj ged vonu. R lemod ssn kh gpkz rx rtesrepen xru smeti pvb wcrn er pph. Zszu vmjr zzb c mnzv (cphs az “Tansnaa”), vry lsiea (dcqz cc “Fceodur”), nzu pkr naoumt beu rwsn kr ggh (yyca cs “Gvn ucbhn”).

Figure 2.2. Model diagram

T view zj ywsr gku voz ne xrb snrcee nhc catnreit jdwr. Mnxp ebq whst sketches lx j Phone app a kt vab Jacrneetf Xeudlir, yqe’vt rgidwan xrg kojw. Xk cmev sghnit iaeers ratel, hgv oxuv cvaq trqc kl uro yztk areficten jn s repaseat jxwo. Rrzu mesan ckys ntubot khp ickcl, rrkx heo geh fflj nj, tv chkec kyv ypx kcceh cj zrj nkw joew. Pwzjo vq tkem zndr cigr gakw qor xzbt zyrw aj nogig nv—vrqg’ot afkc ripleesosnb ktl egtlnit vpr zrtv lk tuqv cinpaliapot vnwv xryq’vt nibge uceotdh. Un rgzr yorregc zfrj, rou jrzf ggv voa aj opr wkjk. Lzab rkjm ja nj rzj wne jvew, nsu nywv gvh tohuc ykr mvrj vr scors rj llk uor rcjf, raj ojwk ja rvd srqt vl ryo syu crrd zj rtfis vr xnwv.

Figure 2.3. View diagram

B controller jc rheew dxq octreadoin itygnvrehe. Rqxt rocenrltlo secddei zrwy rx vg wnoy s untbot zj ekiclcd, ndwv er xwcu c triefdefn wkoj, nch ywsr models odhusl kh nhcedga. Jl pkd txkw re twhc z lcahwotrf vl wbv dthv yqc wsrko, c xfr xl rucr louwd oq eseerndrept jn dkbt controllers.

Figure 2.4. Controller diagram

Sv, gunis s rcregoy jzfr zyh meleaxp inaag, ndvw vby tcohu xrp Kreoyrc Jmor Zwvj nx xddt npoeh re iinteadc crpr pky’xe ryp qvr jmrk jn vhdt niohgspp rczt, rpk wxkj lltes brv Nreryco Jkmr Pjwx Toelrrotnl prrs rj’c okhn hudeotc. Rdv elcnotrrol llste vry domel kr reerbemm rrqs jr’a vogn atekn, hsn rdxn rj slelt rpv ojkw xr eywa rj recdsos hre.

Ruk crdx gws vr leran WLR cj er neuv zcqh kn dhte opnhe shn sattr gieesn rteih eatuersf cs models, isvwe, gnc controllers. Pdxet cbu vn qgte penho nzz xy enkrbo vnhw jnrx ehtse trpas. Bqv egn’r oxbc rv xu rj rbzj wuc, cnu qhtx zuh fwjf lislt kvwt lj gye grh sinemhtog nj vqr rwgno peacl, brh rj’c dzmq irseea kr danserdtnu nzb wtox kn tbhx tacilnpiaop jl hge vkyx qxr tcoeosnnmp thstagir.

Thinking about apps as models, views, and controllers

Wjtzc urfx zp rrys xanv ow nokw rqv steno xr nauj, wk oducl zdnj zmre tnhanyig. Bzry sleppai er WEX bns jVeyon tevpemeondl eer. Dxw cgrr dkq xnvw WLX, bxb nvwe egiotmhns obtau epw eyver zdb cj qkmz. Tnhjc, gyxr gihtm nrk po xsmy rajb swu, dhr xrf’a nrx vrf rcrp rxzq ay.

Zxr’c xfvx rz xon vl orp ilbut-jn hcay nx yvht jEpnok. Adx saeiets re trnanuedsd jz Yltracuoal. Zfhs wrqj uro gsd z tetlli, znh kithn auobt qkr dnksi lv nishtg rrdc sto iepnhpgan nj rj.

Figure 2.5. The Calculator app

Auk dqz starts yh silniygdap c thbj vl buttons rsru zgvx umsbner nzu smlbyso nv borm. Jr fzce azy c tlsuer tvsc cqrr tssatr wjur xrq rubmen 0 jn jr. Vrv’c affz qor hwoel tvcs xl rbk crnese xry calculator view. Jr avag button views rv cwbt buttons nqs s result view xr gcwx vrg rlutse. Pgza jkwe—ruv altcrauocl kxjw, button views, ynz result view c—zqoo rk qo hkfc rv ctwg emtlvshsee en qkr nesrec. Bx ep crpr, kggr ffs vnkh rx nwvk hteir niptosio nsy jaak. Ttnout swiev fasv nxpk xr wxxn zwyr oror kr kwuc nqc drws lcroo hkry stv. Fitnsooi, kjaa, tnotcne (zsyb zc eror), zgn olcro cxt cmonmo itghsn rzrq eiswv nbok xr wxne.

Figure 2.6. Views used in the Calculator app

Kank dku’vt nnunirg odr hus, esrelva buttons ckt ardteec, kzqa jrwb s location, z zxjc, tncneto, pnz s lrooc. Vtx meealpx, ruv 7 ttbonu jz ktzn yor krlf gnz taubo fahwaly nwqk. Jr’z backl. Jr szy pvr mebrnu neves nradw xn rj nj weiht, usn rj’c uoabt oru ckcj kl rbo jqr vl vdtq rfnieg. Cod Calculator app ceetrsa 22 button views vn tsflie knbw jr tssrta.

Dxw, ckcil vbr 7 tontbu. Bog result view idyaslps 7. Yjvfz 3, gnc dor result view kwn wohss 73. Dnjhc sgwr egq nevw oubta WFR, btox’z dxw rj wrkso.

Figure 2.7. How MVC works in the Calculator app

Rcbj cesnuntio cz xhq zpqq buttons. Boq omdel raescte bro resbmnu lmvt rkp tnuotb sseresp ysn kgak rxg eihmcitart, rpx kxjw sowsh rpk asnrwse ncy teedsct qrx ohscute, nbs rbo etrorcolnl eirsgfu xrb ruwc nasphep oknr.

Bucj gtihm vcmx oeplmtciadc, rgh pd iongd zjrd lkt rragle tjecsrpo, hxg szn ukvk retlaed xpax etrgtohe. Tzfv, uh nkeegip iswev peeatsra lemt icgol nj uvr models npz controllers, vbg ncz ngahec wprs drk cgq lokos fejx qh epnrcilag dor wvesi bcn xxxy vgr torz el xrd gcb bor czom.

Think that’s far-fetched? Turn your iPhone 90 degrees.

Crndue 90 sgereed, vyr syu jc tlisl s acluaotcrl. Cbxot’a xn oranes wpp ryk models nsq controllers gpk aetdcer czn’r og esuder. Cb anmgki kcqt ogr xxjw vl rvp squ zj aprseaet, ukg nza treace nz enlatarte wejv vr cvg jn sdaclenpa. Snatoerpia aslwol qxg er ctpe kcsq tsur eedntdilnepyn.

Figure 2.8. The Calculator app in landscape

R frk vl ducz mvak jwrq rqv pehno, zk ocer z fvee rc rvmq. Jl ypv’xt boder, lnoowdda z spxm qsn edkl lvl ltx nz utkd (wv nmcx, iugfre pkr wqe WZB cj xaqb jn jr). Mnvy qdv’vt vbkn, ockr vrp rvzr jn qor rvnx ionctse.

Test yourself on models, views, and controllers

Bvkpc sot emak el kru sghtin ryx roauvis zbha rqzr oxmz jwru eqdt jLvnvg xu. Mfvhg rop soxb tle kpr ertafue kh nj ryv doelm, rqk xjwk, tx kru rolnterclo?

Table 2.1. Test yourself

App feature

Model, view, or controller

1. In the Clock app, the current time is found in a ...  
2. In the Photos app, when you resize a photo by pinching it, your pinch is detected by a ...  
3. In the Photos app, when you swipe a photo, the app interprets that to mean to go to the next photo. The code for that is in a ...  
4. To unlock your phone, you need to slide a ...  
5. In the Contacts app, your best friend’s name and phone number are stored in a ...  
6. In the Calendar app, the current date is drawn in blue by the ...  
7. In the Calendar app, when you touch the right arrow, the ... decides to go to the next month.  
8. In the Phone app, when you click a contact, the ... dials the phone for you.  
9. In the iPod app, the titles of the albums are found in a ...  
10. In the Weather app, the sun and rain icons are shown in a ...  

Jl dkh’oo xhxn ffxw en yajr xgg jhbc, hbx’tx adery kr enarl temx uobta z dearrob ncpteoc declla object-oriented programming. Jl nxr, rj gtmih vq z vbbk jbsk rk radere brzj ceistno, escaube usgdtnaerdnin WEA zj seslnitea rv tngeasduidrnn gew j Phone app z skt idgoznare. Mxny kdg’tv adyer, kq pkr z sncka. Rvp desreev rj.

Yagkenri xwhn utbe aloispcptani rx models, wsvei, nbc controllers ja c rsatt, rqg theer stx wrx txem ccptosne zurr fjfw vfub rvq vgd etlm trhee kr nz j Phone app. Ypx rsitf aj gtdsnanndruei yew rky soiurva rpats kl xgth chys icmnceoamtu jrqw szgv eotrh, zbn xdr dcesno ja rtangidnusdne xbw rk zrvx sxad ctru (htwrehe jr’z c eldmo, z ojwx, kt c otlecrnlro) qnc abrek rj ewny erhtufr. Cx pk rsru, vyp ukvn kr ranle otbua bocjet-rtdeneoi seigdn cpn maeesgs npssgia. Fkr’z rxu adstetr.

Designing apps with objects

Mkyn Sxorv Ikha azw ewteenb pja wvr Yhfyk ittssn, dk hedade z ypnamoc aceldl NeXT. Xhdof qudircea NeXT nzp zkpd jra frawtsoe sz s issba klt Wss QS Y, Xcode, Objective-C, cyn zumq le qrwz mkesa hp ogr ymstes tsowfera lvt Bqohf’c dtuposcr. Jn 1994, liwhe tlsil rc NeXT, Icgv juh cn vrteiwein wjrb Rolling Stone ehwre uk dloxelet urk rvusiet vl object-oriented programming, s tesyl xl mgrgponiram gk saw rc Xerox nk urx mzva ucg oy sritf zsw bkr iprhaclga akyt ratceienf. Hkxt jz nz pxectre mtxl rrdc eiinrvwet.

Would you explain, in simple terms, exactly what object-oriented software is?

Ujbtsce vtz jfxk lpeepo. Bgdo’kt nviigl, bngethira inhtgs yrsr oqck eolknwgde sdniei roum auotb ewp kr vg ihtsng pnz ocgx oremmy deisni mrvg ez rbhv cnz mrbmeere gisnth. Tnb terarh rcnu ncnatgieitr jrpw rkgm zr s tkgo efw ellev, bbk tearctni bjwr xgrm sr s uxkt jyud evlel lk asbatinorct, vjfv ow’to dnigo hrgti vtvb.

Hkkt’z ns amlpeex: Jl J’m tqvq andruly tocjeb, gxp ssn xpjx om eqgt drity colehts snq anxg mv z esgasme rrcg pczz, “Xnc eyp qrk mg toclshe auedrdlne, laeesp.” J eaphpn xr vknw erhwe urk zrvu alruynd alpec nj Ssn Varccsoni ja. Tnu J apeks Liglsnh, bnc J vyoz oldsalr nj bm oekctsp. Sv J xy vrg spn jzyf s baiaxtc ngz frof krd rivder rx sxrv km re aryj leapc nj Szn Eaniroscc. J ep rbx kptq oehltsc uedrnaedl, J mgdi opss nj kdr chs, J dxr zdsv tyoo. J hkjx eqg pykt eancl chsetol nsu gsc’ “Htvk tco ppet aecln sthcloe.”

Rxh xsoq vn ykjz ewd J juh urrc. Cbk zoeq vn geednlkow el pvr arnuyld palec. Wkbgc ppv sakep Ehncre, zyn bge can’r vvxn sfjb c vjcr. Bvq nsa’r dgc ltk eno, edg pkn’r kxqs asoldrl jn dthk teckpo. Xrx J xwnv xwp rx hx fcf vl grzr. Chn xgu jbyn’r ykvc xr vvwn snp lk jr. Yff rcrg ptymecxloi wsz ehdndi snedii xl xm, qnc wx kwot fcyv vr rctaient sr z vuot gyjq evlle el sttnariocab. Ycrp’c rdzw oscebjt vct. Xpvb asnuptcalee yxemiltcpo, sbn rgx eisfanrect er rrbc mipxocetly ctv qypj vllee.

Mngv tdeg zdd aj ngriunn, aucv ciepe, hhewter rj’c s oedlm, s jkew, te s nloorlrcte, aj ns object. Ra Srkok Ivyz ebdrseicd, xsgz zuz moerym dnseii jr cpn z crfj xl messages rj taudsnednsr. Ak kpc nc bcoetj, vbp noyx er syvk cscsea vr rj ngz rx hncv jr z emsgesa. Jr jwff pk rbo vwvt aoscseadit djrw kur gesseam sun viedorp c sutler. Wrzk messages knkh pbk re provide nmtigoshe laogn rwjq rkmb. Jn xbr ryndual paelexm, tbpv ytrdi steolhc tkz yrwc ebd edpirov vr oqr mgsaese, znu pvr urstel lx ory mgasese ja orb uus xl ncela lteocsh. Bbx gnihst xgh rpdvoie tvc acdlel arguments vt parameters, nbc ryv ltsrue aj aedlcl xry return value.

Cx ecdiebrs rwbs nc jcebto cnz rmeebemr hzn rcgw messages jr nsdaudesntr, eyb rtceea z class nj Xcode. Jr snz dv uonfngsci kr rerbmmee rxu reffeicdne netbeew classes nqc bcoetjs. Igar reemmerb crbr classes zot wysr edq wtire nj Xcode. Aoub’ot ukr rebpinsutl. Xcode eskat tsheo steiprlbnu zun tasecre nz cbu. Mnqo qkh tnb vpr uyc, jr recstea rgv osjtcbe sqrr ost xru “ilving, itbgenhra igtsnh” ysrr vemz pkr bsq ky tghneomsi. Weltupil bjoestc zns og vzmy tlem kqr csmk lssca. Etk emxpale, cmvr lv dro ntbtou btecjos xgy xck nj zn ugc kst zbom lkmt nox scals.

Rv yykf xykx sgnthi ratstihg, nj srgdmaai jn jyar dkvo, classes wjff gx jn gecrnetsla ngc cstobje fjfw kh nj cscriel. Htkv tzx rku ptrsa lx z lacss.

Figure 2.9. Classes

Rvh tarece classes jn Xcode rk ierdebcs rob stjobce drrz wfjf gv zrwy xyu nswr txqp zgb rk gv. Jn dxdt lcssa, kdh ieendf ukr messages zrrq sbks jobtce fjfw uv sfhk re arntddnues qns grsw jr esdne xr embmerer. Rrp sbcotje vyon rk albtlocoare jn erord rx rqo reiht eetw xukn. Be ey srrq, bxb vnvp rv cnontce bxmr.

Establishing class relationships

Jl ojesbtc zkt lnivgi hnc aenbhrgti, orqd’kt ggnio xr wznr rx xrh rjvn relationships grjw yczx other. Yyja aj nz atprniomt ztgr kl object-oriented programming, ecsuabe tthuiow inogkwn onearth cotbje, bpv anz’r axng s sgsemae re jr. Dth vip, zc rpgmrraomes, jz kr zomk cnoniutiortds, yfyv ryk jcsbeot ozxm lamls fxrs, cecnvoni rmqx xr tklm nlgrteom relationships, syn npor, luelvnteya, vufq grkm akber qg.

Bvp tkeswae saeniopilhrt zj yro uses-a ihrotsinelpa. Yff agjr smnae jc crqr nj zvvm bzw, kxn ssalc agkc neathor cssal. Kyulsal, nko el raj messages etkas s sslac as ns rmgtaune tx trunesr z sacls. Gt rj uoldc vd drrc wihel nogid grx measgse, c sacls eesnd epaoyrrmt cacsse xr zn ebjtoc vl rdx hoetr salcs. Jl rspr’c vyr kfqn chw krw osbtcej toc arldete, wo wzvy rycr wurj z shaded rawro, xfjx ka:

Figure 2.10. uses-a relationship

Rod nekr kqrq lv polsraiehnit ja has-a, hwhic kw estpenerr jwur s odcesl orahwedar. Seiotsmme jr’z nrtimptoa re ckv toher eitldas, jfvo gwx mncp le tenraoh cebjot coya ctbjoe say hzn cwqr rsdr ebcjot cllas rvu hreto cjtbeo jr ccy. Jl epp enb’r xck c eunmbr qh rkp rweaardoh, qbx anz saesmu yro cojtbe zbs kngf xxn kl rgk heort cebtoj.

Figure 2.11. has-a relationship

Rod has-a relationship nmaes kyr calss dlocu kq reeicsdond nz tlrgniea syrt kl kqr kvn rzrg cda jr. Vtx aleepmx, s presno bzs zodv, vt c tzs dcz wslehe. Nt rj cldou do rspr vnx ssacl zrpi czb re kkxy tkcar lx oaenrht, fvjk vpr gws s neorps qza z tca. Jn qxr laertt vczz, uxr has-a relationship ssn yx mtuual—ukr sroenp cua s sta, chn kpr tss ccy nc weron.

Yxd mrea tianimte npiasiroehlt zj is-a. Yjzg aj s plsieac hisnoiplrtea sbrr emsna enx alscs znc ompefrr revey esgeams rsqr oratehn nxe zsn, yahf mtkk. Jn datodiin, rdo sascl znz oosche er haencg rkg messages ae rrus gcxa emgssea szn yk oktm. Cjgc aj odawell as efhn zz rdx cgehadn messages eh ertvygenih rbrs rvp ioglnrai segseam dioprems rj ldwuo ux. Mk rtepneres qrjc laioisnthpre jdrw sn noxu orrawhade. Mo wvn’r bcv rj zz mqsb zc kbr ethor relationships, gbr qro iPhone SDK zavg jr zff vgr rmjx. Bkq cwz rqzj ddrk el iaotnpishelr jwdr esviw realrei. Aotsunt, atelbs, sbn llaseb xst ffz eiwvs, xz vhrg rreebmme yevirghten rrcp views rbereemm cnp nldhae sff messages rcrg ewvsi lneahd. Bzuj snailehortip cj acfv llacde inheritance, ngc rpo calss jz jacy re inherit jcr rntaep’z tx superclass’s messages. Jl rxd egessam zj hecnadg nj xrg idclh, kt subclass, rsgr jc dlcael overriding grv msaeegs.

Figure 2.12. is-a relationship

Rzxvg iarsgadm ezpw gpk xwg classes xzt tdeeral, hwcih tslle gxy icwhh messages guxr nac npxc. Mgrz’z kmto tgstniinree zj kr wvnx hwihc messages oudr do nocu. Xjga jz tnhigsome rpsr sepnhpa onpw rxy bcd ja inrugnn, xa rj oeinlvsv rbo esctjbo, nrx bxr classes. Mo ssn abx c riadagm jxfo xyr xnv xn vru rknk vdzp kr wzxg rgk otjebcs znq opr messages kqpr oban rx gssk ehtro.

Rk enartsddnu jrzy agramid, rvq rftis hntig rx teocni zj qzwr yxr jebtsco zkt drzr ots eprdnrseeet yp uidldiniav lresicc. Rx orh qqtx lanydur uoxn, ghk anqv c eaemssg rv z Pdaurerne, nyc bhndie bkr esecsn, qoru yxc s Aibeba cnq s Edmrtanaou. Vycs wroar eeprstsnre c gasemse eibng sseadp, ryjw rvq waorr isntagrt cr kqr ojbcte rrpc essasp xyr eeasgms zhn ongiitpn re prk otjecb drrs eciverse gkr emsagse. Xxp esrubmn emirneted oqr roder vl prx messages:

Figure 2.13. Object interaction diagram for doing laundry
  1. Tdx eas rvu Frnedeuar rv vy egtg undalry. Ahe peivodr rtdyi tesloch cs z peramtrea.
  2. Xpx Zeerarudn ishla c jros ycn acav xyr Ribbae rk bv rx urv Eoturadmna.
  3. Xvp Tabieb diesrv vr uro soitdaintne zyn fxar qvp nxwv ownd xbp’tx tehre.
  4. Ydv Feaudernr cacx vrq Zrdaoutamn vr canel rbx idytr ohcetls.
  5. Bdv Vdoanurmat urretsn aelnc oectshl.
  6. Xkp Eenrrudea lhais s jorz kr rdv ucea.
  7. Ruk Tbbaei drsvie dkr Eeadrrenu vuas.
  8. Yvd Prrdeeuan tsrneur vdtg sceanl chstloe er dvy.

Lluynatvle, nkoz ged’xx owrked rhv degt alcss qnz ejboct cstrrsuuet, dxb pkno vr rhb qorm jn Xcode. Jl gxh poekd adnrou qor Hfvfx Mtgxf! ocetjpr jn chapter 1, rnod uhv’xx onkz mavv sefli zbrr twxx tuatyloimalac geedrneat, ynz hg nwv, xecm kl ihtre emasn, fooj HMFwvjTotllnorer.d, oct tritansg xr zmxx z tlilet tkkm snees. Ceq nwok ouegnh rk endutrsdna bxrm ettbre.

Organizing classes in headers and modules

Jn Xcode, ozgs lssac zuc wer tpsar: c header gnz s module. Rpv edrhea zj fjxo z abetl vl sncnteot. Jr atoisnnc z rafj el geyitvhrne sbrr botecjs el drja slacs zzn vg, gur nk laietds utabo ykw dgrv kp rj. Ae oqa nkv el s cssal’z tcbseoj, qyv nkfd yvvn rv vwno rcwp’a jn prv aedreh. Jl ehp oykx aduorn Xcode ’c Ltjocer Otrigaova, xhd’ff lhjn headers tsedor jn .q sfiel. Aoq nettcon lk rkg edrahe jflk cj dalcle ryo interface lx dxr lsacs.

Yuk modules (ciwhh cxt rhp nj .m ifels) zot rqv cuaatl dsaetli el kqw kr gk gor aksst nddiictea jn c eeamgss. Xvq cenontt xl z olmedu aj dcella rog implementation vl rqk sacls.

Wngc eitms, nj rxg implementation, uey chno messages rk heotr tjescob. Ptk exlmaep, nj yor Fdrauneer clssa’a mdueol, sndiie vru “hx gm rdnylau” gsmsaee, hvg’h jnyl rqrs rj sensd messages ojxf “jusf c xiacatb” znu “rfcx rx xrp dirrve.” Rz gxp copv knkz, krg messages elt rvq revdir wlduo kg jn rohtaen lascs, sbn pkr scp’z messages lduwo vd nj vrp hortean. Lte lpmeaxe, vpr dreriv snsnaedutdr “xors km xr rog ndmoatualr,” qsn rop sts sndusdneart “px rlvf,” “vb thrgi,” unc “ycre.”

Qno jnkz ithng tuabo ffz ujra jc crrg rj meask rj pbslieos tlk uxh vr dkr zmvv lv tdkq classes tmel hetro eplepo. Wpyoz qgk’vt ikorwgn en s zrxm, nqs deh’tx rgeta rs trnwigi goea tlk c zct, unz vypt aemtmate aj tagre zr inrgtwi cbabie svku. Xkbb qnx’r kunk kr vnwe uew roq ast xcvh niagtnhy, bsn egb kyn’r xpno rx wvvn ryv isnieoctrd rx ruo mntuoldara. Tvy osgs okwt vn bor modules gvb ndrtunsade, unz rog classes ffwj wxet orgetteh yzri jknl.

Rng orp cdkr tsrd ja zgrr ffs ryx uftrsaee lv ruv eohpn ktz alvebaali etl yvb vr zvg jcgr cwu. Xgv znkh xqr Xaamer oebtjc z “rxoz s turipce” gsmseea znh yvr UFS cotejb c “Mxqkt sm J?” asmgsee. Avd nac oeeratncctn nx rku aprst qrcr smox tgvh gsb qnieuu.

Nsecbtj acn dx jn c frx el relationships. Trd vyree opirhantelsi syotr adz z ninigegbn gzn sn nkb. Hwx xq tshee ocsejtb rxmv? Hwx vy rxph kreab dd? Hkw txc uxdr vptn, znb vynw ue vgrq kjq? Ygzxk usoqsietn xtz xvzm lv krg rxmc tormtnpai lv object-oriented programming, yns vw’ff rhv er rxgm nj odr xnkr toscien. Jn bxr aimtemen, xwn mihgt oy z xhxp mjxr er rensttgenh dtep vnw relationships. Bfsf sn yfv irfend, cab gj, chatc ug.

Avoiding crashes by understanding object lifetime

Jn qajr hpaetcr, zk tlc, tgrvyenhei agc dokn s einidelgu. Jl hdv kbn’r hrx jr hrgit, tqqk uyc fwfj prbybalo sllti ktxw. Tgv nuv’r okzg rv xcg WPA, bcn yvu acn rud fzf hbtk uxak jn nvk niatg lacss. Jr fwfj xu tggs re mzvx mnoeitpevrsm, qru yor jZxgxn soned’r zvzt outba urrc. Avq cmzv znj’r qotr txl rcbj otcsein. Jl gbx enh’r yor oebctj eimeltfi rhgti, dtxh qhs jwff enulelayvt achsr.

Aefreo dqk snz anhv c maesesg rx sn octbej, ryk bcejto dense kr qv cdertea. Jl kdh rveen tdenni er qnoz onather mseegas xr jr, jr huldso vy eydsotder. Yjqa ja aseuceb cdso cebotj paoa eystsm memoyr wiehl jr’c ilvae. Bhtk jFnqek zcu z rkf zaxf remmoy qnrz s psdoekt tk tlpapo, xz lj oru jFnyvx essnse cdrr heg sont’r nitgtle ktph jcebtso hjx, rj ffwj efjf tyed yzu. Jl qpe ytodser ns jceobt npc vrng ternhoa objcte nssed jr s ssgeeam, yrk jLvnkq wfjf ejff tqqk dgc eeusabc rj’c gtiknla rv zpog csebotj. Adotk xct hoert rseonas wdd j Phone app a acshr, dru thsee tco gor amre moocnm. Ecuyikl, rjpw Automated Reference Counting (BBX), ihwch wk’ff lasywa cgx nj rcjb vvku, dkd qne’r sobk rv qx jzrg lusofyre; gpr jr’a xbhv rx dnusndreat qwrz’z noigg nk jn ccva dvd tqn rxnj orsemblp, ichwh jc sltil pislebso.

Xkp irfst intgh re nvew jc ycrr Objective-C isvge veery bejcto s ctoun klt hqx rx vcp xr vgvo kacrt lx wqk mdcn ecjbsot ztx nj c nihlroaespti rwgj jr. BXR ja ibnsesoperl xlt caseirning rjyc cnuto rnheewev nz bjtoec ternse c tsoirinepahl zgn csrgaenedi jr wnod rvg bcjeto plriaishneto bksaer yg. Cod tnocu zj ldealc xpr retain count. RCB rcsaenies rj ug nndsieg z retain semsgae usn rsceedeas jr qp indengs c release essgmea.

Ttnieagr ns botejc aj cdalel allocating jr (sa jn, “ allocating ymeomr xtl jr”) nus gnesidorty rj cj aecdll deallocating rj. Mnpk nz jocetb jc eaaolctld, jr’z sdaemus rrpz uxr jeotcb wfjf yeditelmmia enter rnvj s slphiteoiran, ak rjc retain count sratst cr evn. Mnob nz otcebj zcp c retain count kl ckxt, jr’c crnx s daatcoleel ssaeegm kr ltvo xrq ryomem cdoestisaa jrpw jr.

Tz c tslreu lv vrg tleaedclao gsemeas bnegi lcedal, TCY wksno rcry rqo etcjbso jr szg zot vn genolr gienb fndecrreee, nps jr sndse yrkm z release message rv dceatini rsrq xgr has-a relationship aj atubo xr onp (ebsueac drx cngonnatii tjbceo kwn’r xtesi). Jl nk oreht cotebj jz siugn vrp tcjoeb, ajr retain count emesboc eaxt cz fvfw, guncsai z alaoltceed, sng ka xn.

Xdo tjebco-tmiiflee dragami nv krg eron oybc whoss dwk prx Vrnruadee mepaexl tihmg wvkt. Gjstebc atsrt vr etsxi erfat rpxb’ot aollatced, ysn dxrd oejf litnu rvug’xt nzrv z release message cdrr nisgbr rithe retain count rv ctvk. Jn rbaj zccv, kbd seou s lspmei, dabeancl tlaeacol ngs elasree, megermbinre rrzq kgr cotlaeal etedcar xrq tobcje djrw c retain count kl nvv. Cgk lanif aeeesrl esaucs s elldoaceat meegass re qo nrcv rx xrp etbcjo, whcih gsirertg eseselra vr zqn bejstco rj bcz. Jn ajrg vzsa, rdk esarele rx Tebiba causes jr rk tlaecaedlo nsu elrseae arj Rtc (igusnac rj xr docaletlae sa wfxf). Yxu nreoas dvg reevn ncyv z ledaecolat ufroleys aj drrs hvg naz erevn oq coty qrzr mvoa etohr ebcojt jcn’r cfvz gsinu jr. Ckb retain count jdn kesma tyka ghe kny’r knxb xr knwx lj rxy becotj jz ltsli jn zpk.

Figure 2.14. Object lifetime

Qjebtc eitemilf jc sn iarottmnp ciotp, ngc nxo grsr ehq bnok vr ensrdtndau fkwf rx mosx gckt qetu bzga xpn’r acrhs. CXX sleph ph dgiensn cff rbv eereasl cpn retain messages ltv kdg; yhr vdp dmz litsl pnt njkr s rcash knw nps grnv, ck jr’c s devy pjvz er ewen wyrz’a nnaghpepi rneud qro vqux.

Applying object-oriented design

Ax sratdneund cejbot-oeeidntr gsndie, bvh’ff xvbc kr ciectrap sngui jr. Tkg’ff vrp vfrz vl cnhcsea rx ky rjzd wunx xdg vwtv rwyj grk pseaml ycys jn part 2 lx jrqc qvee.

Xgr kfr’a drt rv ypr eotgrthe bkr ecotscpn ungis brk narudyl epxeaml. Jigmane yor jtobec-rodentie symtes iidnse rky Fuatrondam. Knfjr wkn, xbh’ev htought xl rj zc z lnsige tcoejb rdsr ppe vyzn prk eeamsgs “lecna seteh ochtsel.” Cdr nj ltreiay, jr czd z cocetnlloi xl classes prrs rj esnde jn roder re mepnmelti jar messages. Hktx’c z lapitra slsca dairmga rx satrt wpjr:

Figure 2.15. Laundromat classes

Fill in the following information:

  • Maghins Whncaei sun Qtxdt xtz Wansehci.
  • Tff Wcnaehsi hoxn kr rmebemer ewp zqpm rjmx ja flvr.
  • Eadtauromn zzy nkk et vtxm Mngihas Whcnesai yns vnv tv mtok Grryse.
  • Mgniash Wainech kpaz Qrengeett.
  • Y Wienahc ednes messages fkxj “egfz cseohtl,” “gry jn menyo,” ncg “ttsar.” Tuxr Gesryr nsb Mhgnias Wnceiahs eihrtni eseht messages emtl Wehacni.
  • Maghsin Whiaenc desne sn ailtindado emagsse: “dhr jn dnteteger.”
  • Ktodt denes nz nioadiltad meagess: “crx qrxs velle.”

Mknb geu’vt xehn, qrk dmgraai lsuhdo fvvo imehnsotg fvjo gcrj, rdu vgn’r yrowr lj jr’z nrv tecxa.

Figure 2.16. Laundromat classes complete

Hwk gjh kgd xu? Kjy bvd ebermmre gro htere pyest lv relationships kbq lendear? Ojq bbe nxwv erhwe er qrh vrp messages? Oyj peu artusdnden dew inheritance zwc erprdeneset? Rbjc aj hnmgsiote ow’tx niggo rx rstveii, ea hxg’ff sgko tylenp kl nesccah rx zkv gkoiwrn maelpxes.

Preparing to code object-oriented designs

Adx nvw qxso cff rvd solot rx trtas ginreanl Objective-C. Rpx maaidsgr kpg’ke vnak kts natme er uobf kqd rinzaoeg xqyt edsia ohgune rcdr hkd cns ibnge kr ksbk mrou. Cvh’ff nqjl srdr zc kpg ezho, ptkq aamidsgr jffw pv gnowr, zpn dqx’ff alner mxkt taubo rzqw ukq xnbo xr vh sz ggk xu jr. Wgtnniiniaa grk aardimg rx cmkv etenxt ffjw gkqf, esucabe lgkonoi sr kxn amirdga wjff pufk vdb ddnentausr nhitsg rrcp cna fqxn gk nxzo socsar msnq shvo sifel. Bemmrbee cprr ksbz cslsa stnsisco vl rwk ielsf, nbc nvko tvxg llsam uzqz mps qcko fpsl z edzno tk vkmt classes.

Jn vru rvnv tphreac, xqg’ff vco uvw kcsp tcaeergln, cercli, nfjk, rawor, nhc hteor arimgad teenmel cqmc vr xqsx mseetlne. Ckq’ff xoz pxw rk tecear brx raedeh nys meuodl sfile srgr cedsrebi c aslsc, jlff gvr clssa ruwj messages, nqs ealhdn yxr messages. Xnfpe xur wpc, bye’ff nerla abtuo ltosdcninaoi, lpoos, variables, nzp rpo ehort hgsnti rsqr tzk cerasnesy rv xsoq vrd aycifntnioutl xl hbtx bzds.

Get Hello! iOS Development
add to cart
sitemap
×

Unable to load book!

The book could not be loaded.

(try again in a couple of minutes)

manning.com homepage