From 1ad5e4abcef9759dafaa19755c90113f2d5184f0 Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Fri, 9 May 2014 23:08:02 +0200 Subject: [PATCH] The Deallocation Problem. NS_OPTIONS macro. More information about copy attribute. --- Cocoa Programming Guidelines.pdf | Bin 121239 -> 122879 bytes Cocoa Programming Guidelines.tex | 28 ++++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Cocoa Programming Guidelines.pdf b/Cocoa Programming Guidelines.pdf index 74f2e0a2ce4960ed581cdaadd2860593fdc6ae82..8914ce9b9a8cd05eb4b358941b98fc14752d9893 100644 GIT binary patch delta 16573 zcmZX*18`0Zb>*B*+l?a&nHJp%%i}&_CSyqVFe6cth3Y276 z53-R3O+9M8lnF@@1~R+w-&**#ia?i{O*9IjEz*yb=X@2W!a_X~iQrZZu5*p{YI|4> zK~)px)QC;Rfi z=Hf4x)BR)9kn-Kzw0s4CBs2@3JJV|dg7b(bg+&+U3xU!0d(hK16q32KF zZ0^7oN*Sq&PS*~7)>~HPh$yGnSw+GZKbx;E`(knMpZLTjEr2E;%R=s*H9kYuPj4(U zUergM^2*|%Hvwq;u0SgOS2x2hrW5;w)!BGl<1R=0Y>g%NW4nj>N0Sx?9Y|pd9?gUf z;h6VHZn7rewMqGqI@!Cdp>Un*=?TUS*|nP<&W+FP^|e>CZ0^a|2H@i!8m3zL7|z_@ z?Embzc~hNHG7Kn7veG#vfP?ja#W145AHT_ju>JA#5xPdEq!$4l2d){~)n@H6}paNgES!|*QAC8Jk4`LHt`i@^f`7fqU#cO#e^!_&W5Vbw@C<_=m}Gee*pgh^pT0Wgvjxh2{_(q4)_r($!j)W{@LpW+KzGLXK} zZporGLnPX?KA)BMn39LfCA128%N*&e;Uss3h&cG^9^7b9N_h7v9SDJZo=4eNhG~6% zMK-nC^eOIOu*%xxk#fUO^RvO9?jk4~Yo)kQqFAiZ!;VA7qc(NcQP3e5T7QOc5-`-r zg*O$99JK zyQmk&Tz#$r7I?q0RdA2Qvz$sxLkc^MfTC z^-b={AQ*>9f*p4AJ`_j^PBATR3JGnE{n~Tg%@>&LUtXO5uSo69989d?I5_`NDOD4= zEi4QeC)2-*ZDMmRg#u;$cNoCN#{NGi*_EDbJQ*iqFHrLjk>hV_8CqDFcVr`vfQ~17 zaBc|h_U)@}(O&@*6ac_QA+&gdUTgXGAr8bRb-D~HO;nLU60L_J&*`66@a=-GfzX}s z>su?jSEjGeww`Ahq(cC>_urfD>#t8?>c0;h>;SKGz}Fq)snO|x$cyWx``)Pc_Uz-V zt0H6HXHAL#wfXYUY)n4Az~!SS`&c-EoMzuvIq;3}z%AlQz9WB=Agy{CiI@BdWA^yu zRp-=lqptcq)!%L=UdEU5J<_1!=E0@!Hu2i!o8uW!@geVA-%6Ojj^$-UC%H&OU$@bB za`*WKcx?Cps;pvt&fOyugsE(i|JPprUG3{vl_D;hMH3cbb%l4sIg&Zlg*5;@nLF4GPIF5iT%le zmt3vMMOL7pbhXwX?PGej5t7f!TG?dPT@Ba1S+3dP(9WA#wzIZLsTnd;uTt-h*BHgD zW?hZ07SLrktbwxE0*$z`?E3>(P`^=$!L;~lV9NXJc+s!bq;l76B4F^Zak_mi$10u&Ey9jFz)kh;^+W1Q z5yOZ5+s|4c=((rONbf~*6$j~%!#3FPXP!QDvqo zu4vI-41B#tjt>1W4Te@20F7tN3t2l2AeJ-Qg+svw;d z+-|79r%>_R^IgcNP=f6O|oWZqP3=r;(j5~0AQj| z9JY)+;dK#0&6FM<3bEm!E|T6>m-cRa{%kNiT3a{S=@$h}DEUBz=i7LdezvC#^+fOY z*Y`%Nah-%OvcMKcgcmtT^SKIsg&jx-FE_-+*~OT$`WXELy%ri;;vmRqr*{!SY-z7_ zL8rRUwxKe{I7>jthGJ|Hi_(Tb1B4EWO;Voo;_$VorEY3#R|V3G+gB#gk90MxrB4NC z)J&SdQ%2WbZL2-q+Yl>K%BiSy4$2al)A|55#p;>#y z22g|O`wNaCW#8fb_Cewv*1#{H6b{zetO(XwmQ}@SjAr2J?dYi&aV21@1W+Y&wJ+D6 zWSUxTq{5P4rsJQw;EP;If_AjI!2Ec&RyurCkIUDi?FjBT5#K4mfi4tAYS|@AH@JZ} zP&{_e+k4{c$tTisz4ZSSveS1MdV#|>ji*`rjpBy@MkF=)v-u~8r}ID@|l8a0hbVxG#)bvJqJ7uWIu|Ufl7F4$Z`Mq zIuCQ!Amd8Y@L8l7b!~}^r8P<0Sm$oct40F#OAPgW&5Cq1^_-lg34jT$J?;RL1_8sMcxS^lZL+Y8E)9?kvf-sq62){UtoCi~dy zYh_m#A8E~e@bFYAu1^%-{Ie?70ga~)u&3&n}4)D zZ}N(1^dIRE0Y?8x#TYgjLXXUVe5~^@a4W@b{ZIu#V$$OPPA5}dY#pyKHfj&Ur-SEK zuSQ{@y?@cJQykZc$SjPRqNSoq;>Fw(W6;WhQ7@0r&O1bBybYbqo)J|3d!l$U5VD_{$0pzDO@>m-;`=x3M7^g=tBAxi z;=!Xq#KF|b(-ZYh=e($Ywz#8|kjR2NqxADhZN-359_!yt5Q*(q42xjx31hR)Kuv?3m!3} z<^|KW?)GYa;j{%JILzGbSOu2gI18(=ctR6yw0^7XpRMQV%$wxl0mGLtwBt!MwMYP< zce7vx6klk2OFE{gUw#fOAcVPIpmYs9j@}OeFL?`p@+fX_ABRJNiWZ-YHWb!v9>KrN|*-;~KIJ*F-bGocg;T`Jn&VKw&#Th@OYY3Cp^oaIfG343X zT*dskV6<)>SYn**LEPGVZieW9P*VO2mq2q>bz;%nanYFmBD8Z2jMykBSjLU&>s(w> zvSkAA!sF*9N83b#^sHNnw;h-+TwTk3OWYlCcRif?nxqUNmO!>>SlLsePy)Pg{i^*% zumg)!DD8qTO2FjD!ZApcq*i%)hTN(95c=|+6KEh%xpFN33&}W|wC4Y&JI>_7b*d(_ z5IET6!cFR?wAc%%|9+MXweY}_3G!+p!T z|8QT&kN1c(P`)hjIv4Zf|)Qx|D zW_8e&*IBGIEHe-%qfa+#M$(l+LQQ<=C;`Joux1MhL|JuyMa?zf!@J3#O)*Lat;eOb z=XwIue~tA&upwU;YowY+TiIm~jZAc6lz=fA*bC@SCmc*~2Uw63qohC4e>6rSh>PjT z**g2N7U`^{sNl}I`7=JzJ>eS2jr}tK#TCtJ?iN= zGt3>nUEin*)-T0_%s+IspSnAf5Nsb|CFg(HWp&MbCguNOUONM*+A9DI7v{E<$KQ5e zmI1kFJLg=V9$9h$=wP-8zNXi?xPY%AH@U$tcKJTiD-~+A(wqF<^s>h!c^8u`PYb<} z*p+7mRKp{s8p5AlV&X z7n89VB=CEESr%4Bf1D+7pWQd`t{mb`-0{SY$+h0VFr5BqpMSRk!@4g|i_V@;kN0qq zpv^YCY~4N4fEg6_QXx8ZQ0GH$=&VvlkeSz13ZkSgluP*yKKd$#;>+?;{4#>7PCs#V zF6J0cg=Rbk)St@)^eNU<-2lKFpx4VI1!yH#`^7Be3CCmpC}&6?LauHhkO4+WfuI4TARs=- z0p__te>Xj)*}nsL#+RpvIkpYoEnR}=T8!KmtMAZVpZ71T@A*VIW0ia*Yh2P=2^;k! z^S@RQmO4ihcvx&0zQkJH_Y$|t!te3q>Nd7_sm7Z^sV{K?*K4+SV!wVgP$Z=&Ysz_;+gGL5B2;tmm?&&_xivr0U>Z$w_5+-6{VTIK3VTNqXj?e4 zHatgv{YHqC50E5F{1l@JC5Nn`Shs-h>JI#Tx*4``v_PE<(}6_x9lctm*aLa~A$b5l z%^{0FNKxY#RkfvUii|p1;2J$wpj|QWMFxuS#{&#@m)Zx4JO@z#bz%t*^i2b^=J&M0 z<&ai=eB@^4@EHJVbgIpnul;39JY-2%Mi)c!V61ING2~|To{!YGPd;BVB%S~H5Y-qX zC}32EOR0DQ6c16))-xTIuUG{_B%&xmr3hBs8CM5yK)!z_T^6tPUc%$umo1$_n7us=`UlU*i!}jZ15{IWdFz z?ZnHuDRRYwy&%*@`f3u_6$t-mZ#LXx3a-b$m_G`$ofvPirqn+l?0n5;T;}#zLAHIk z9TZT%(0{T#UZGiVE+&LXVb8r>LKes#6-W~OJB~;W7#3Cn$?3RGI*;7{>lKS$H7uka zeBk#=`4Ye+>7ikG*L?|Glo!0VB(EY&Ql=!YGIUX?!S!*P;Tc=9b=&7eNpMH$9Mjc0 z9X(DtQ@(<=p}E)T@sPRrHBTdyP9_~?mLcU~XpY-Q1P^e-MGRLi_l%?*`AD2Bvj5|d zaarOzq^zyZO!%#UP})*>W)x<^fvBlQCGOdE#9O!c1FgB9 zNXG?!foh=nbhO!CZChrp$DGq5NCzuFV zRlNw$Irmp5c=yZUE0=rQo|y9nnWy5|{{9}I{tO`2YmS&mif5P{TbC9KAko4jD=FT< zc7(+1CNk_#_Qpsi3K!wA5Q*@suZQdr8V0}@ha9ol5t|&nIXw`=A{d)~wdR-$s+9EB zaM+XU89iwhVjmeb?8s#a_v)4&s<+q_N3~9R=D>bGMhpudIUo2J_ewY~#11{ZDDt|j zyXOSbJ9fylaOde?PB`%rK=|UHLRdj?5iLhBa%OR_b+~Sa@(Np{kdPNc7ql$+3IgtZ z#pWLBfn*wfgzuL=S7YM&D`mfTgFX+nl-+AAiPB2Vk|CM&K&*f{dlPXZq$8m|w)s>d(^4dgqoDk!ziR%4^OuG*I_9ebv6t?FMw%vYV#am~MXNZ|)9ZDIoM?5wj-DPt**&T_)FC zo0Rdd+W8;LqIh-WbA%mWU3uU-#QZ3&{v|HL;X&gKv3L}`R1;Tr{sdB9SgR>}Wo|4( zbs~h58u&M$I$vMA=K_Qi3xF&KSsJu3xWcm4k%eh11{;uUi~)HB2s7!Y(IhaMLaU@J z>{+fEcP>KHZSSeflkl+fuUXys{_Xni2Etx5O?Tm#>&6$;7Me~$~kE`0hKIKcT zIcgf6>HzP8G`~i-|8G>}W+P@I{?`%Y<4e{)Cv56#DTf99uQ?dkcLEE}%=BM(FlQnb z3Y6_Xyr?{{^xq|vP2=lppkU1ZT`|5{2K^uZkg_TDuoLP(2m2?NIR?>set{eKPd zW!;%Law>#gAk8^sSrD^eDEbVEO5@@`CKgTjGGUodS+XdH%5%~x5?dGxLq_J;rW_l; zJSSu;^T`m$kDzsrAdi5TQ>B~ z%MK{!S9mC7PCF=NDy6Pi|55xO*PK!h|0ugZx5)7@_spI}j3J*#rV z!aw9}5d&ufdz})88xu5>ysH)GuTpR7M6&reEtuk0ZJX!E6{{v@NLPFlP8!})pCSIT zpAvQE0?!=~2@=gkI_yNDtZNW<0L8IiW9}$AOmyz=7Bb6sPk}wV?*wWSuej^CsKpNPD$*c7ZQ_UyXW0a*%kY$PNyck&^Da*=P>* zk@0T8)IL{0m2jC@Q#)A(FNABuBV3Rob$(tbq+C`&_W0vZw9q@9i>d+J)=tuIeGUrR zIH<>cZSV_srKOLvC7>4HsK8BJlakDYXXy`RfEnkyHlw*BWi`RoEWW7IeG`13X+BRF)I5lut!Cb@;?OH_a}0HWPeb%V(eS~KJFtoo0O{aT|YXU)oT|2B<~H=Mivv;g zw|u4K9$$`9Qxb*UB|unb6N@a%rgfA6<`7JcaLJO9wi2|t;Ual-6GuUsIx9I5l|J_o zTpreW`Kb>5u#&t&5`f(Z_$!!7Kv1J_b1v$Ldh)T|? z>q<+_S33&&;sOWqm+QP+2>2XN9X2+nw7m+1pJuoWOKsX}>H0cd0>ycHB*u0Cy!DNh z`sPWIbv}V~XnArjR!Ke_`RN`6AW~ILujTGag8qZ~nA3e<+#M~T#~ZbOkb$t*5~cSP zFNAT~g}Zq_0-??TO~bP8#IdJ>)Hu&Y;fx~$TkVB3y5&r|LHztzKjbFQQtDTPquN0qsPgYQOPpDCEQ> z95H;6GFj5isqQPbNQ$o}q)oPpKL}PnoIBEtdPF76WiH6At`&9@lPc1HyY;2tM+ZK> z!AvZSb?;%fMT$7X2oZ|3R#vm9 zTWfAITBkPLtHOb#g(`28q8JJA0Pxq`N0H>o4ioSFX*I%4&%01!5XL`#UEE3Miqjfu zz{{tJs5YmxbBp>XI`%NY4-d;B1pk>-Hc9^MVv5~sEp|*aX5(DUHuf4yceJHy9&QEy zKW3MEFbX}-dMH=~J~amW+o6)NN)mOLn~LS7+r;8AE^WXU zGy5YdI7admYz-!{_Z%hCXEr*x5M^nGPlXc<+BT~>07D7_bK{5rZWOz>ke|X#O`Mxn zV5CT53;++wSR9^cx(S+sLJ*4dfE>_yyIRYo_?*zK**ZJx+)@r3i3!Wm;_aLC#tf!I}EgP_`A$BQa-dliF z3$sAyF7%Bz7QZft4Qo>e&fs6JQeR+K>58B5qFR508gB^!Bho*?$)jM*<8)7&ww`4a zJ%G!kM~=V6idliHql2%+v#yY4c6?wIuY~U;i?BsaD8_7Ph_(NXS*Ih()r>zZa~^Hw@?TIzdY*^g-0&`dWtbHeL_eRO$i{>2j8ilC&$mnP#vjos(7Bbm-Tjsu(e z4E7#tLdH!-Y0GJJy3Oo-7`kQYz1uf#XmM$rFz=1KrM;pnJD?CV>b%4_DzZ}H)nP&h zL6Wo#K=Im;h1}k_&J9|;Z~h5stby2qW^ul~0ndP*Gh>bqAG$_sE`tSgz4kNhJ>>$z zV(RhAq;Pq(*N@J1%kr^#nq&jLFE7Tan0YaHqb&eKf3i7XQ9&KnQmPG6?W{5+*c7_2 zh1mu@v}bKJ|CKdbK?hoKIy87Z)RZySC6JTd_8mtCi8j1X9yP8wCX+)K!X?+F_|^Wf zS^S~6DYDF(KU2$sGqVaObBr{l!zNXOUvhP>1;bd`!2kJ^pzD_YDli373@a-0nqoE| zHNB?#A>^FLism)8U0$FI7ej0b>RZG1IfS zhp_dL%t*G8+rJ4~sFiGec=`l@N}MWmG8;x6+7M7Nl-fkqy{fxCQ550iiXjRi$dOEu zY8)sW%9vQ`rvcH5HNzC-vuk1}kuN-np4^g*Gz$Rb!zxq~f?8}TU^^~C856!_Q#%g= zP@j|^YOtThi2MpQ)s#BCx*wUl7FCp54OB@%L4Qxu_Z z!X9$`Fs$N_y{H2-vN_BH^8=ag7}?AOJS4cX9Y1+^UO@;(N#;O@;Dpu*&IFy?U;)v2 z?k;XX=noqcjWr^|fQ*sEJff=@45$$V`XvC8Qi8;*BIq0v7arC1gq;#1Xuub;-3yHg z-_bK1Wo^z!N)fvojhGeGD|BlCTMQMVgr;VQe0-vkoO)UmM2e|dB;JFLoVH+ZkI5%+ zAsDH9AKj%OAtP;^LX6I3R%59mggMPvChK)luCl5AY|HmU6o0)uUO7R)Poi_IbUHA0Kzj8t)juu0ir^vV%J;u2~}>9D2Uq6$=)7M;Zm z)mer4<|y%VajJ~ux^^58r5R!@C69}3%oG_dtpW^1I}X2se<~4Ne)+iBZ4v-s5XHLz zNeAcQ8(vmz6y46+eTYxZIHF9ki7|r-S70ZtL-!#w#H)kT&jfX#us{iU9I!UxInE2g zEPSDswW#5%xb%$PafS)K%gTK`?eW8u!lH^=kY>}PQg>Ed+d7Z1md+fg(^o3r;*0;81}Mc~Hi}~yVKt7RV$aY}n1Q@weg) z&}>=3-f%6kq1|n2cCQ?8KQ!?ZH%0Fl@dJjjTbdr++7Z^#5>?NUDOacIdi7J*;pakVTatN9g zF;a*1F&juL-c~$;WeDmIm1CVet{=lh!I#*qM1F+Qmf(S~=1U3#25+}&Tu4E=AcLYTYi;?M#4$8hx7gjJWS`383 zvWSr577fm5p#d`KfGlutLg7{?45nuwPeP;UbjDF|$7#<@(pTjo$Y>z7anW$#RP%Z? z?{YwQT8Ko~0B1&1rwJu9WjQPG=w|Q#43#2r4gDa90fi^0OJrqN=SpjE4LIPO0-xf@ zKaPq(X6?y<6DB7yBFVt9H#)+>`~fQm0&B&h8F2&vuYuSL&iko7ES4cUzHnV8f;<7O zg<+9p11EMI@C2@gbgQ#zptu(rHi?wW5T(L$;Nx&t zm>4Eb_WbFGnI34|#Zl_eEa4w6n;_ycvv9Cdd-^+sxv;9B5z>YbI7;ybf{JzTlHG^8gY&p-sf?QFzeX-LMB;!%JqQ)2M+9Sf z8pZ1RDG9ax+Rot*&2Qtk!9}y{vk**8G~fdhYnEFv}CD!)31lMgwQ! zAFrX6myJJx>&1HX1;DBNo+$mGfBsvH;0O<|mtr`n-a>Oxvu3Md&QX{5s~T{uum6X! z$-E_({rE46uguo((($g%2$>?!V{VX8NcuT<>0ro`{m9_yjoUfAo?frPyn&N_e^tS) z{ihTUC43<6-qWgtz1;lCwY-2imSbUjKBV@WQ|q}+S1lrHzIGS8mP00nST{RW)Cu+xs2|_T#M zv~dAb24skR=Y0TE>;<1_)~H7wiNaDY`;pay(~9$)c9qL4a{N_O&v+18aXhE2^76QoO7t|<=jsyfE*a~qEk5(3@4>9ydCp=4mYg_gl zXJb}`fov(>-T0q>FE5wgXfhB-zoPj7JbU0cA56Ak1)>7Bqqf1= z9Hx`P24m-o1L++o_4VDzD3~?0VrGyRaL?VDU5!eM%8P21gtIrvClnmV zDikZ1GXJ&d$S`Bp6B<(IW*S9u!;y_PM*nl1fpZlaQj=#IBsQch(aGd#i6;dSx4Cbb4SglTidm)6-}#!=07DbA0Wy|iGl+TwEs2RZAmP|V znBm&!1RTk7OtQFtWZR22m+}zK@?G;pBAvU$dg11ld4;CL*l$Q5$PrdN1F%7V_&h7Nc){b{79t)M8gaCPQ5e<3H{5cTp@rDYjRtRdYOD9LO*?t)G|C#aCxPACt&P zMzofq95HU4GL1Im74bG`uDIS6G?{}#AzM;3y9UghjIf6|&HRXqtMG=)7Ue;D&bZ^V zoac>6MoIps91GZ+T`@cH7j&Km_L+|!)!io#6aEcoHiFNWcUl|rcYzp{EWD2%=V=0< z@)g@NH|(qcysM8BM{v$vIZ3h5ChYy$Hq-j4eeR#%ye(?TQGNfksotnkcVKd^$s>y)0X+`^iU{ZT^{i zIO$+m%Jw&AAKdcDyy4LPm=@%-(>O-!#Kd<%3JNl$>!ZU;c-w|QGUVgKm{3*z?v!_U zZ&`-PninN2%34ctdq_f;S7p4(%jVB8oRSCcAs^wf>MJkd{5+tIGhqw`hvNp=BklDV zkUv=W*hRTDi8?or)J>hBSZ5JkvG<&5YLR7#A*l{C3iy5lE%aWfF)3bGgc>T-4UMWa z{RZ`q7<{&#A~Z#?6h~yi(y5b88nm2GO;Y*trm9L!pz~m@bzKU+V0~)?L%s`uOR;b}iJ&oY_By^=p94#W&wy&!3Gu9Ocxnq7D2r zX3wqOP^&i~r^Kg<>xQuDYW??Cs>|s9En$#!H_2|?jBT4my_e|se9C}RgL<|^qqkbU zR3yi?qqBnV<<$f8Y+G#btTC4LvAdo2@XelSALd29h{W$kaqM=+JWcugQZ0U> zL3eh*FD^zbeO5hvw9w9wiAU11NU>?83v(BA8P&f!*RFRE9&}k%5^#YX0R}6Zk7c_S zu^?xm(rB>B4kv1U>iGb@2QPSKVmCV2#C>CB5yEA@f6}f)#^nvVBnEbp&3klXvP1r% zznOHr%<9Ye$|I@ zuXG&*jghvpO_f<~ndQ_mH&9vQWFXn7=ho*?@7 zXHrd-NrRpsaV$d~Q10#+jo`Vr3Kt#g!X^m$fHcfNswFYu-85D03P1n~f;2@>DyBk` zwDO@bZV|2Pi9VTr(IBc9Q&WbeeZ}1Ph2$n7ag+W+21=a#dlRpXkqER9H2ugGl&0;C z7}OOMjFsu%QlYjqQcxFAa8@R^HUx6e4W)ldim1|mxPi)na<%EWfofCyV{=fYZ)Ab8 zfiW|;A!mbjFo7}u`(p%E`u!9r4=8Io{WK^ZJO>=3gq5?4D=`OKx|16yA%KO0o%w$% zkbY}#I&X5J`n_oG*k(7x!z5?aEhb;u?&B*`4Sz4H@G={8GA z&noD_d4ei%D&*UPk*~%m4YE_oF*TzK3b!|lX$70gqkCBXSP&^zAI_McLm6Y5RT{MX z#~O*DiQ`QJ)Ps!0f|Lwl7sIF`1jkUy$rj*BXTaW$BA;aa#1>LN1*bbf-^V-+3J2Fq z-S2G(sRp4|s|QBFB)rar8Gz+6kyeN@R!16XAX7x{fvGlfA!8ScM&mgeN_oO-6>=f; z;}qim;1aWp30@k65tbtkat31*k~)nnR8RqvlCC5NVAIf?L=7ZKx8opsX4JNDfyAMS z!G&s|(R7f{7LJHtb0yL;5qewNgQs#K?}PaL_%%n(lg(rW?SpB&7l#r9)e(axo{7+X zNSv^Tpez??{>!Ogr~+9qbQV7s92}uQre6}uM~3trKZb@P2-seV`!%l}4uWhhG9S^1 zO+p<3D2_sfB-~FAXwxx94H6;1JlRVuJf+wZ02`J{h(=Ho`6(f))_(1n3~NFoXA%=i zKE71$GnT)|^YG!|=chjXlZ8>r;7`fpQ{(i++t}_@Bek^C9g$!)(sNvXI0{j`Ax3^w z&*9RiwU_d~gwB!V--yWI9*eo>xLvB!xeJLYK#Fg_*IA!vK3iVyN4{I}hhy0F3quZF zb!R)JfL6_T=vzPe+jdIS+aP*`ONuj8%WFm8&59h<_5tIwXZpa(COgB{^(Qe=) zIl_&WBu$4Q;qk>{AhSowS*Gw?2DNx!MJtG014xR zI772Xc6_0@?Ua!hHnpy3-K3DFz3r=d_-cb&c0sc_q@D?+3ck!4U-eQfYL0Y@Jdmd6 zlkP}A7adG$DD#$RM&Gq`4FqfQ_3K#IlR9Q!_|H$3EfWux1=Ep&XqAh^Qz!E=g+c^*D+Vzytxx;aTDP17?p`Ho;P{VJuYCp0vt`xblvBXU%x( z9I>?XcCGrYQm?|j8ED~Uz0iUU?Uk3&*=ZDc&=~$eDC#q+7GrYvVAB~7?4bO4ryOJ2 zQ<__#L9#`k#?yHTK}GTnuHoX%*KNq3HqKt4x}Q4c)CfkJoneygS(_&*fWwPLO41WK zpVEz`7GYacqRw%H0N$cctyQV$rR2&tR;lyiV?cAHQH+`7_r9VLj0Wb{P8!Cx(x0{N zTFM`P*o5S?k}=lUMi?66iR}X8&(+z!EZyLGI4dV4N5ykSi1OKtps}=_$tLpJz&? z%)U9yk%xxyskDIff4Ybdh$86E`S@GWy0--Yq8qY06EiyG$i{m6@CpRv`Qka|0J4`5IF zLzp4W1gMc0q=v9;AVD`&vNVaw$ZgFId%xJA{5yJqPV+!QlUpcY% zH-I^8rh3eiLDGW5V41h0c3LiGFa}GdeAVbNiZBE354c4<$kAgV;qwZ8%w&7?8BopQ>0qMOGnRjFcq?m8gZ_kMRgzPXoFlSw=6 zD`|_o>3i^Ac#RhQ;dnazLlC&Tl>K)6qM^kc1IU`7tcU#BXkkDloan zX^twJa%*j93VLNSb)3>w1}IkYywoka3sLoawMxMW#^_Dj=M5RHl1E1CJ=Ee&^)70t z*IaYdqHFuniUw6pA8KP+E~Aj*s2XZep}oHuGjgvldYTnoc`{H~nbxp?CVr--TXV~O zJw$AyOLq^cF^(%;>GeSXjRb9O?s6&CU7Kn99&Y$LUZ_+Q8u@~*0^s-kT%@+A^;Kdv znPgHfT~E>GL8+j4-RDXg=?KzvkCLbR%d9$p;0|s}80r^gJ$^HK0>u0`0UrwL@{V#4=;6ydc1W@YS5%@>5iKQpdH@l9F zxnoX2a7Ux1Phg5M8lZ)TX{Dat_Av(>5ud;Ba=xBoGrY{7NldePn7lf?KcRfsCqOTZ zO;G4Fc>$;D<=71-Oq=a>Qd_si48x7qcW=MW_E1s-#m@7Eon!P&+v3&W)#^WJb<+vFC0)vvBD7$unyGY1_T=|tv~oCdZBh&Ocar_ zXm!o_-roBqVWk3O=#O8!3bIsiRgyRX_u9U8AU{crM`8Ulf8}w4bsny)a`o++h=2u! z+3vyA%&!57X)cFD9LyBtDDtr@%TYTqe5?MDo58&ktLhaSl7|J_X2qK&WG|~$j2lmt zs=s1h3?5gi1JEMPlyrn^Xt%O>cpBOdxrm30G2Gs7k_82Fo+y1^i^fmD8yCNuYZCgE zHBP?MQpgt7NaPirq zffljG`{12NrcSKjB=FxR+>YoaWVWItcoq#mG}~Tp21j1g97APYb;ZB=^D$f!{I(MP zUOP=~^7`Euy05J@Ir5|CyrRAcs|jADE)J8nCLl*weUVcH7Q>C>JR0kk13tSvR=>fy zF-?%+(nVH4QNfs5(=}H9C0Dlem=#cJ05{kFASwH@wo;rjcK;plP0cVAGgM`xMLAL` zEurM{gJJ!JUc2cg5@tPJ>A7*LmytD#c_|l14;M=>)9Db*@7rbT@5%J{^vCQ=ugeY) z4dv})mE=4{U=2@~Tddn0-68 zOz}~~!8U59p8LIk@x4&6wI2jwIL*=@V1qDdWE)I^9c9OiFvJW-#tc`?47F)oBQwDN zL3rS4?E>_a>ld?)Ct!k2RzERcw^429K%dzpENPsdxppsUR;M|)mZhbTD_t{|rIIO` zY>jVqEfcFu@dB(TNknQ?!nBmam*!5wBI$Oj;O1AKXVaghaHVEBwYnCQSN*|QOA@xK zyC)q3rOp=yXf4lF?Sjs57XWzzjk?E@V3)5K2 zNRjK7Hd%+f`LV#N_T}12k-ezDT-lm|wkf(?zLSQ(6$MbeMbJ3Vo*r?@h*xa@DK{om z7{lR0voOZVVl@9zJM^O+wr!6XKW5Vj`g&MjD@fFl=z3ITE7-@0`g+WnF97-u8F2`X zF9z$D)L?Lm3tw^%qdN-Tk#Ke_u^ky}-$XA+)(M?qNJKC0=N(MkXt5_k{2?q~q^Toa z?cj1dW;DQwKW-?t9j9%dhA;N;j!(mw-CzheC!mE354fjCH;BQ7LbY$!JqydGdV#Xj zpX~|na7fS{{Zfy3a|rG`zCGRT7o&JfBQOMf1v5PO=^N{COW%8F|7)8y#Tti zkk`8yjei0Dv!3SNh}AZ(7dzr>4GesKIs^t`U_}l)Wy&(r=L1 Z?5LM?`*l!4corsBCO8TTaYYHZ{|EdfD{}w< delta 14924 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 H#9{vrC8yfI diff --git a/Cocoa Programming Guidelines.tex b/Cocoa Programming Guidelines.tex index 6e5d160..1f761c0 100644 --- a/Cocoa Programming Guidelines.tex +++ b/Cocoa Programming Guidelines.tex @@ -272,10 +272,6 @@ In need of greater granularity: #pragma mark - Overridden (UIViewControllerRotation) \end{codelisting} -\begin{tiplisting} -Create a code snipped to help you use the same pragma marks through all implementation files. -\end{tiplisting} - \subsection{Property attributes are kept in an order} The attributes are kept in the same order through all property declarations. @@ -300,6 +296,10 @@ Getters for boolean properties, if they are adjectives, are renamed in the follo @property (assign, nonatomic, getter = isTracking) BOOL tracking \end{codelisting} +\begin{importantlisting} +The copy attribute is often used with NSString, NSArray or NSDictionary to preserve encapsulation, since the value passed into the setter might be an instance of mutable subclass. +\end{importantlisting} + \subsection{Protocols and constants are prefixed with a class name} @@ -609,6 +609,9 @@ else [self performActionC]; \end{codelisting} +\begin{importantlisting} +NS\_OPTIONS macro is used for declaring enumerations which are to be utilised as bit masks. Such enumerations do not contain the invalid value. +\end{importantlisting} \subsection{The highest level of abstraction is used by default} @@ -984,6 +987,23 @@ The following getter implementation traverses view controller hierarchy, and ret \end{codelisting} +\subsection{The deallocation problem} + +The \inlinecode{dealloc} method of \inlinecode{UIViewController} does things that are not safe to do on a secondary thread, thus it must be deallocated on the main thread. + +\begin{codelisting} +[anObject asynchronousOperationWithCompletionHandler:^(NSData *result) { + [self processData:result]; +}]; +\end{codelisting} + +The foregoing code would cause a problem if implemented in \inlinecode{UIViewController} subclass as the self is retained by the bock. To fix the problem it must be referenced by a weak pointer. + +\begin{tiplisting} +More about the deallocation problem can be found in \href{https://developer.apple.com/library/ios/technotes/tn2109}{Technical Note TN2109} +\end{tiplisting} + + \section{Core Data}