±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcasatwy,ÎÄÕÂÖ÷Òª½²½âµÄÊÇview²ãµÄ×éÖ¯ºÍµ÷Ó÷½°¸¡£ |
|
ǰÑÔ
µÚһƪ¡¶iOSÓ¦Óüܹ¹Ì¸ ¿ªÆª¡·
µ±ÎÒÃÇ¿ªÊ¼Éè¼ÆView²ãµÄ¼Ü¹¹Ê±£¬ÍùÍùÊÇÕâ¸öApp»¹Ã»ÓпªÊ¼¿ª·¢£¬»òÕßÕâ¸öAppÒѾ·¢¹ý¼¸¸ö°æ±¾ÁË£¬È»ºó´ËʱÐèÒª×ö·Ç³£³¹µ×µÄÖØ¹¹¡£
Ò»°ãÒ²¾ÍÊÇÕâÁ½ÖÖʱ»ú»áÈ¥×öView²ã¼Ü¹¹£¬»ùÓÚÕâ¸öʱ»úµÄÌØÊâÐÔ£¬ÎÒÃÇÔÚÕâʱºò±ØÐëÇå³þÈÏʶµ½£ºView²ãµÄ¼Ü¹¹Ò»µ©ÊµÏÖ»ò¶¨ÐÍ£¬ÔÚApp·¢°æºó¿ÉÐ޸ĵÄÓàµØ¾ÍÒѾ·Ç³£Ö®Ð¡ÁË¡£ÒòΪËü¸úÒµÎñ¹ØÁª×îΪ½ôÃÜ£¬ËùÒÔÄÄÅÂÉÔ΢¶¯Ò»µãµã£¬ËüËùÒý·¢µÄºûµûЧӦ¶¼²»¼ûµÃÊÇÒµÎñ·½Äܹ»holdסµÄ¡£ÕâÑùµÄÇé¿ö£¬¾ÍÒªÇóÎÒÃÇÔÚʵÏÖÕâ¸ö¼Ü¹¹Ê±£¬´úÂë±ØÐëµÃ¸ÄµÃÇڿ죬²»ÄÜ͵ÀÁ¡£Ò²±ØÐë±§×ųä·ÖµÄ×ÔÎÒ»³ÒÉ̬¶È£¬×ö¾ö²ßʱҪÄÃÄóºÃ³ß¶È¡£
View²ãµÄ¼Ü¹¹·Ç³£Ö®ÖØÒª£¬ÔÚÎÒ¿´À´£¬Õⲿ·Ö¼Ü¹¹ÊÇÕâϵÁÐÎÄÕÂÉæ¼°4¸ö·½Ãæ×îÖØÒªµÄÒ»²¿·Ö£¬Ã»ÓÐÖ®Ò»¡£ÎªÊ²Ã´Õâô˵£¿
View²ã¼Ü¹¹ÊÇÓ°ÏìÒµÎñ·½µü´úÖÜÆÚµÄÒòËØÖ®Ò»
²úÆ·¾Àí²úÉúÐèÇóµÄËÙ¶È»á·Ç³£¿ì£¬ÓÈÆäÊǹ«Ë¾´ËʱÈÔ´¦ÓÚ´´Òµ³õÆÚ£¬ÔÚ¹æÄ£ÉÔ´óµÄ¹«Ë¾ÀïÃæ£¬²úÆ·¾ÀíҲϲ»¶ÍÚ´ó¿ÓÀ´ÔÚleaderÃæÇ°Ë¢´æÔڸУ¬±ÈÈç°¢Àï¡£Õâ¾Íµ¼ÖÂÒµÎñ¹¤³ÌʦÈÎÎñ·Ç³£·±ÖØ¡£Õý³£Çé¿öÏÂÈòúÆ·¾Àí¿³ÐèÇóÊDz»Ì«¿ÉÄܵģ¬Òò´Ë×÷Ϊ¼Ü¹¹Ê¦£¬Ôڼܹ¹ÀïÓÐһЩ¿É×ö¿É²»×öµÄÊÂÇ飬×îºÃ»¹ÊÇÄÜ×ö¾Í×öµô£¬²»ÒªÍµÀÁ¡£Õâ¿ÉÒÔ°ïÒµÎñ·½¼õ¸º£¬±àд´úÂëµÄʱºòÒ²Äܸü¼Ó¹Ø×¢ÒµÎñ¡£
ÎÒ¸úһЩÅóÓѽ»Á÷µÄʱºò£¬ËûÃǶ¼»á»ò¶à»òÉٵر§Ô¹×Ô¼ºµÄÍŶӵü´úËٶȲ»¹»¿ì£¬»òÕß˵£¬µü´úËٶȲ»ºÏÀíµØÂý¡£ÎÒÈÏΪµü´úËٶȲ»ÊÇÏëÌá¾ÍÄÜÌáµÄ£¬µü´úËٶȵÄÓ°ÏìÒòËØÓкܶ࣬һÆÚPRDÀïµÄÈÎÎñÁ¿ºÍÈÎÎñ¸´ÔӶȶ¼»áÓ°Ïìµü´úÖÜÆÚÄܴﵽʲôÑùµÄ³Ì¶È¡£Å׿ªÕâЩÍâÔڵIJ»Ì¸£¬´ÓÄÚÔÚ¿ÉÄܵ¼Öµü´úÖÜÆÚ´ï²»µ½ºÏÀíµÄËٶȵÄÔÒòÀ´¿´£¬ÆäÖÐÓÐÒ»¸öÔÒòºÜÓпÉÄܾÍÊÇView²ã¼Ü¹¹Ã»ÓÐ×öºÃ£¬ÈÃÒµÎñ¹¤³ÌʦÍê³ÉÒ»¸ö²»Ë㸴ÔÓµÄÐèÇóʱ£¬ÐèÒª´¦ÀíÌ«¶à¶îÍâµÄÊÂÇé¡£µ±È»£¬¿ª»á¶à£¬¹¤³ÌʦˮƽÀÃÒ²ÊôÓÚµü´úËÙ¶ÈÌá²»ÉÏÈ¥µÄÄÚ²¿ÔÒò£¬µ«Õâ¸ö²»ÊôÓÚ±¾ÎÄÌÖÂÛ·¶Î§¡£»¹ÓУ¬¼Ó°à²»ÊÇÓÅ»¯µü´úÖÜÆÚµÄÕýÈ··½Ê½£¬àÅ¡£
Ò»°ãÀ´Ëµ£¬Ò»¸ö²»¹»ºÃµÄView²ã¼Ü¹¹£¬Ö÷ÒªÔÒòÓÐÒÔÏÂÎåÖÖ£º
- ´úÂë»ìÂÒ²»¹æ·¶
- ¹ý¶à¼Ì³Ðµ¼Öµĸ´ÔÓÒÀÀµ¹ØÏµ
- Ä£¿é»¯³Ì¶È²»¹»¸ß£¬×é¼þÁ£¶È²»¹»Ï¸
- ºáÏòÒÀÀµ
- ¼Ü¹¹Éè¼ÆÊ§È¥´«³Ð
ÕâÎå¸öµØ·½»áÓ°ÏìÒµÎñ¹¤³ÌʦʵÏÖÐèÇóµÄЧÂÊ£¬½ø¶øÍÏÂýµü´úÖÜÆÚ¡£View¼Ü¹¹µÄÆäËûȱÏÝÒ²»á»ò¶à»òÉٵزúÉúÓ°Ï죬µ«ÔÚÎÒ¿´À´ÕâÀïÎå¸öÊDZȽÏÖØÒªµÄÓ°ÏìÒòËØ¡£Èç¹û´ó¼Ò¾õµÃ»¹ÓÐʲôÒòËØ±ÈÕâËĸö¸ü¸ßµÄ£¬¿ÉÒÔÔÚÆÀÂÛÇøÌá³öÀ´ÎÒ²¹ÉÏÈ¥¡£
¶ÔÓÚµÚÎåµãÎÒÏë×öÒ»ÏÂÇ¿µ÷£º¼Ü¹¹µÄÉè¼ÆÊÇÒ»¶¨ÐèÒªÓд«³ÐµÄ£¬Óд«³ÐµÄ¼Ü¹¹´ÓÕûÌåÉÏ¿´»á·Ç³£Ðµ÷¡£µ«Êµ¼ÊÇé¿öÓпÉÄÜÊÇÒ»¸öÈË×ßÁË£¬ÁíÒ»¸ö¶¥ÉÏ£¬¼´±ãÈÎÎñ½»½ÓµÃÔÙÍêÕû£¬¶¼²»¿É±ÜÃⲻͬµÄÈËÓв»Í¬µÄ¼Ü¹¹Ë¼Â·£¬´Ó¶øµ¼ÖÂÕû¸ö¼Ü¹¹µÄÁ÷³©³Ì¶ÈÊܵ½Ó°Ïì¡£Òª½â¾öÕâ¸öÎÊÌ⣬һ·½ÃæÒª¾¡Á¿±ÜÃâµ¥µãÎÊÌ⣬Èüܹ¹Ê¦×ö¼Ü¹¹µÄʱºòÔÙ´øÒ»¸öÈË¡£ÁíÒ»·½Ã棬¼Ü¹¹ÒªÉè¼ÆµÃ¾¡Á¿¼òµ¥£¬Æ½»º½ÓÊÖÈ˵ÄѧϰÇúÏß¡£ÎÒÀ뿪°²¾Ó¿ÍµÄʱºò£¬×ö¹ý±£Ö¤£º·²ÊÇ´ÓÎÒÊÖÀï³öÀ´µÄ´úÂ룬ÖÕÉí±£ÐÞ¡£ËùÒÔ²»ÒªÏë×ÅÀëÖ°Á˾Íʲôʶù¶¼²»¹ÜÁË£¬Õâ²»¹âÊÇÖ°ÒµËØÑøÎÊÌ⣬»¹ÓÐÒ»¸öÊÇÄã¶ÔÄãµÄ´úÂëÊÇ·ñ×ã¹»×ÔÐŵÄÎÊÌâ¡£´«³ÐÐÔ¶ÔÓÚView²ã¼Ü¹¹·Ç³£ÖØÒª£¬ÒòΪËü¾àÀëÒµÎñ×î½ü£¬¸Ä¶¯ÓàµØ×îС¡£
ËùÒÔµ±¸÷λCTO¡¢¼¼Êõ×ܼࡢTeamLeaderÃǾõµÃµü´úÖÜÆÚ²»¹»¿ìʱ£¬Äã¿ÉÒÔÏȲ»Ã¦×ż±ºðºðµØÈ¥ÕÐÐÂÈË£¬¡¶ÈËÔÂÉñ»°¡·Ôç¾Í˵¹ý¼ÓÈ˲»ÄÜÍêÈ«½â¾öÎÊÌâ¡£ÕâʱºòÈç¹ûÄã¿ÉÒԻعýÍ·À´¿´Ò»ÏÂÊDz»ÊÇView²ã¼Ü¹¹²»ºÏÀí£¬°ÑÕâ¸öŪºÃÒ²ÊÇÓÅ»¯µü´úÖÜÆÚµÄÊÖ¶ÎÖ®Ò»¡£
àÅ£¬ÖÁÓÚ±¾ÏµÁÐÆäËûÈýÏîµÄ¼Ü¹¹·½°¸¶ÔÓÚµü´úÖÜÆÚµÄÓ°Ïì³Ì¶È£¬ÎÒÈÏΪ¶¼²»ÈçView²ã¼Ü¹¹·½°¸¶Ôµü´úÖÜÆÚµÄÓ°Ïì¸ß£¬ËùÒÔÕâÊÇÎÒÈÏΪView²ã¼Ü¹¹ÊÇ×îÖØÒªµÄÆäÖÐÒ»¸öÀíÓÉ¡£
View²ã¼Ü¹¹ÊÇ×îÌù½üÒµÎñµÄµ×²ã¼Ü¹¹
View²ã¼Ü¹¹ËäȻҲËãµ×²ã£¬µ«»¹Ã»ÄÇôµ×²ã£¬Ëü¸úÒµÎñµÄ¶Ô½ÓÃæ×î¹ã£¬Ó°ÏìÒµÎñ²ã´úÂëµÄ³Ì¶ÈÒ²×îÉî¡£ÔÚËùÓеĵײ㶼ǣһ·¢µÄʱºò£¬ÔÚView¼Ü¹¹ÉÏÇ£Ò»·¢µ¼ÖÂÒµÎñ²ã¶¯È«ÉíµÄÃæ»ý×î´ó¡£
ËùÒÔView¼Ü¹¹ÔÚËùÓмܹ¹ÖÐÒ»µ©¶¨ÐÍ£¬¿ÉÐ޸ĵĿռä¾Í×îС£¬ÎÒÃÇÔÚÒ»¿ªÊ¼¿¼ÂÇViewÏà¹Ø¼Ü¹¹Ê±£¬²»¹âҪʵÏÖ¹¦ÄÜ£¬»¹Òª¿¼ÂǸü¶à¹æ·¶ÉϵĶ«Î÷¡£Öƶ¨¹æ·¶µÄÄ¿µÄÒ»·½ÃæÊÇ·ÀÖ¹ÒµÎñ¹¤³ÌʦµÄ´úÂ븯ʴView¼Ü¹¹£¬ÁíÒ»·½ÃæÒ²ÊÇΪÁËÄܹ»ÓÐËù´«³Ð¡£°´Õչ淶À´£¬×Ü»¹ÊDz»ÄÇôÈÝÒ׳ö²î³ØµÄ¡£
»¹ÓоÍÊÇ£¬¼Ü¹¹Ê¦Ò»¿ªÊ¼¿¼ÂǵĶ«Î÷Ò²»áÓкܶ࣬²»¿ÉÄÜÔÚµÚÒ»°æ¾Í°ÑËüÃÇÈ«²¿ÊµÏÖ£¬¶ÔÓÚÒ»¸öÉÐδ·¢°æµÄAppÀ´Ëµ£¬µÚÒ»°æ¼Ü¹¹ÍùÍùÊÇ×îСÍêÕû¹¦Äܼ¯£¬ÄÇôÔÚµÚ¶þ°æµÚÈý°æµÄ·¢Õ¹¹ý³ÌÖУ¬¼Ü¹¹µÄµü´úÈÎÎñ¾ÍºÜÓпÉÄܲ»Ö»ÊÇÄãÒ»¸öÈ˵ÄÊÂÇéÁË£¬ÏàÐÅÄãÒ»¸öÈËÒ²²»¼ûµÃÄܸ㶨ȫ²¿¡£ËùÒÔÄãÒª¸úÄãµÄºÏ×÷ÕßÃÇÓÐËùÔ¼¶¨¡£ÁíÍ⣬µÚÒ»°æ³öÈ¥Ö®ºó£¬ÒµÎñ¹¤³ÌʦÔÚʹÓùý³ÌÖÐÒ²»á²úÉúºÜ¶àÐÞ¸ÄÒâ¼û£¬ÄÄЩÒâ¼ûÊǺÏÀíµÄ£¬ÄÄЩÒâ¼ûÊDz»ºÏÀíµÄ£¬Ò²ÒªÍ¨¹ýÊÂÏÈÔ¼¶¨µÄ¹æ·¶À´½øÐÐɸѡ£¬×îÖÕ¾ö¶¨ÈçºÎ²ÉÄÉ¡£
¹æ·¶Ò²²»ÊÇÒ»³É²»±äµÄ£¬Ê²Ã´Ê±ºòǹ±ÐÒâ¼û£¬Ê²Ã´Ê±ºò¸Ä¹æ·¶£¬Õâ¾ÍÒª¿¿¸÷λµÄ¼¼ÊõºÍ¾ÑéÁË¡£
ÒÔÉϾÍÊÇǰÑÔ¡£
ÕâÆªÎÄÕ½²Ê²Ã´£¿
- View´úÂë½á¹¹µÄ¹æ¶¨
- ¹ØÓÚviewµÄ²¼¾Ö
- ºÎʱʹÓÃstoryboard£¬ºÎʱʹÓÃnib£¬ºÎʱʹÓôúÂëдView
- ÊÇ·ñÓбØÒªÈÃÒµÎñ·½Í³Ò»ÅÉÉúViewController£¿
- ·½±ãView²¼¾ÖµÄС¹¤¾ß
- MVC¡¢MVVM¡¢MVCS¡¢VIPER
- ±¾ÃÅÐÄ·¨
- ¿çÒµÎñʱViewµÄ´¦Àí
- Áô¸øÆÀÂÛÇø¸÷ÖÖ²¹
- ×ܽá
View´úÂë½á¹¹µÄ¹æ¶¨
¼Ü¹¹Ê¦²»ÊÇдSDK³öÀ´½»¸¶ÒµÎñ·½Ê¹ÓþÍûʶùÁ˵ģ¬Ã¿¼Ò¹«Ë¾Ò»¶¨¶¼ÓÐÒ»Ì×´úÂë¹æ·¶£¬¼Ü¹¹Ê¦µÄÖ°ÔðÒ²°üÀ¨¶¨Òå´úÂë¹æ·¶¡£°´ÕÕµÀÀíÀ´½²£¬¶¨´úÂë¹æ·¶Ó¦¸ÃÊÇÊôÓÚͨʶ£¬·ÅÔÚÕâÀï½²µÄÔÒòÖ»ÊÇÒòΪÎÒÕâ±ßÐèҪΪViewÌí¼ÓÒ»¸ö¹æ·¶¡£
ÖÆ¶¨´úÂë¹æ·¶ÑϸñÀ´½²²»ÊôÓÚView²ã¼Ü¹¹µÄÊÂÇ飬µ«Ëü¶ÔView²ã¼Ü¹¹Î´À´µÄÓ°Ïì»á±È½Ï´ó£¬Ò²ÊÇÊôÓڼܹ¹Ê¦ÔÚÉè¼ÆView²ã¼Ü¹¹Ê±ÐèÒª¿¼ÂǵÄÊÂÇé¡£ÖÆ¶¨View²ã¹æ·¶µÄÖØÒªÐÔÔÚÓÚ£º
- Ìá¸ßÒµÎñ·½View²ãµÄ¿É¶ÁÐÔ¿Éά»¤ÐÔ
- ·ÀÖ¹ÒµÎñ´úÂë¶Ô¼Ü¹¹²úÉú¸¯Ê´
- È·±£´«³Ð
- ±£³Ö¼Ü¹¹·¢Õ¹µÄ·½Ïò²»ÇáÒ×±»²»ºÏÀíµÄÒâ¼ûËù×óÓÒ
ÔÚÕâÒ»½ÚÀïÃæÎÒ²»´òËã´ÓÍ·¿ªÊ¼¶¨ÒåÒ»Ì׹淶£¬Æ»¹ûÓÐÒ»Ì×Coding Guidelines£¬µ±ÎÒÃǶ¨´úÂë½á¹¹»ò¹æ·¶µÄʱºò£¬Ê×ÏÈÒ»¶¨Òª·ûºÏÕâ¸ö¹æ·¶¡£
È»ºó£¬ÏàÐÅ´ó¼Ò¸÷×Ô¹«Ë¾ÀïÃæÒ²¶¼ÓÐÒ»Ì××Ô¼ºµÄ¹æ·¶£¬¾ßÌåÔõô¸ö¹æ·¶·¨ÆäʵҲÊǸù¾Ý¸÷λ¼Ü¹¹Ê¦µÄ¾Ñé¶ø¶¨£¬ÎÒÕâ±ßÖ»Êǽ¨Òé¸÷λÔÚ¸÷×Թ淶µÄ»ù´¡ÉÏÔÙ¼ÓÉÏÏÂÃæÕâÒ»µã¡£
viewControllerµÄ´úÂëÓ¦¸Ã²î²»¶àÊÇÕâÑù£º

ÒªµãÈçÏ£º
ËùÓеÄÊôÐÔ¶¼Ê¹ÓÃgetterºÍsetter
²»ÒªÔÚviewDidLoadÀïÃæ³õʼ»¯ÄãµÄviewÈ»ºóÔÙadd£¬ÕâÑù´úÂë¾ÍºÜÄÑ¿´¡£ÔÚviewDidloadÀïÃæÖ»×öaddSubviewµÄÊÂÇ飬ȻºóÔÚviewWillAppearÀïÃæ×ö²¼¾ÖµÄÊÂÇ飨¿±Îó1£©£¬×îºóÔÚviewDidAppearÀïÃæ×öNotificationµÄ¼àÌýÖ®ÀàµÄÊÂÇé¡£ÖÁÓÚÊôÐԵijõʼ»¯£¬Ôò½»¸øgetterÈ¥×ö¡£
±ÈÈçÕâÑù£º
#pragma mark - life cycle
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.firstTableView];
[self.view addSubview:self.secondTableView];
[self.view addSubview:self.firstFilterLabel];
[self.view addSubview:self.secondFilterLabel];
[self.view addSubview:self.cleanButton];
[self.view addSubview:self.originImageView];
[self.view addSubview:self.processedImageView];
[self.view addSubview:self.activityIndicator];
[self.view addSubview:self.takeImageButton];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
CGFloat width = (self.view.width - 30) / 2.0f;
self.originImageView.size = CGSizeMake(width, width);
[self.originImageView topInContainer:70 shouldResize:NO];
[self.originImageView leftInContainer:10 shouldResize:NO];
self.processedImageView.size = CGSizeMake(width, width);
[self.processedImageView right:10 FromView:self.originImageView];
[self.processedImageView topEqualToView:self.originImageView];
CGFloat labelWidth = self.view.width - 100;
self.firstFilterLabel.size = CGSizeMake(labelWidth, 20);
[self.firstFilterLabel leftInContainer:10 shouldResize:NO];
[self.firstFilterLabel top:10 FromView:self.originImageView];
... ...
} |
ÕâÑù¼´±ãÔÚÊôÐԷdz£¶àµÄÇé¿öÏ£¬»¹ÊÇÄܹ»±£³Ö´úÂëÕûÆë£¬viewµÄ³õʼ»¯¶¼½»¸øgetterÈ¥×öÁË¡£×ÜÖ®¾ÍÊǾ¡Á¿²»Òª³öÏÖÒÔϵÄÇé¿ö£º
- (void)viewDidLoad
{
[super viewDidLoad];
self.textLabel = [[UILabel alloc] init];
self.textLabel.textColor = [UIColor blackColor];
self.textLabel ... ...
self.textLabel ... ...
self.textLabel ... ...
[self.view addSubview:self.textLabel];
} |
ÕâÖÖ×ö·¨¾Í²»¹»¸É¾»£¬¶¼ÈÓµ½getterÀïÃæÈ¥¾ÍºÃÁË¡£¹ØÓÚÕâ¸ö×ö·¨£¬ÔÚÌÆÇɵļ¼Êõ²©¿ÍÀïÃæÓÐһƪÎÄÕºÍÎÒËùÌᳫµÄ×ö·¨²»Í¬£¬Õâ¸öÎÒ»á·ÅÔÚºóÃæÏêϸÂÛÊö¡£
getterºÍsetterÈ«²¿¶¼·ÅÔÚ×îºó
ÒòΪһ¸öViewControllerºÜÓпÉÄÜ»áÓзdz£¶àµÄview£¬¾ÍÏñÉÏÃæ¸ø³öµÄ´úÂëÑùÀýÒ»Ñù£¬Èç¹ûgetterºÍsetterдÔÚÇ°Ãæ£¬¾Í»á°ÑÖ÷ÒªÂß¼³¶µ½ºóÃæÈ¥£¬ÆäËûÈË¿´µÄʱºò¾ÍÒªÏÈ»®¹ýÒ»³¤´®getterºÍsetter£¬ÕâÑù²»Ì«ºÃ¡£È»ºóÒªÇóÒµÎñ¹¤³Ìʦд´úÂëµÄʱºò°´ÕÕ˳ÐòÀ´·ÖÅä´úÂë¿éµÄλÖã¬ÏÈÊÇlife cycle£¬È»ºóÊÇDelegate·½·¨ÊµÏÖ£¬È»ºóÊÇevent response£¬È»ºó²ÅÊÇgetters and setters¡£ÕâÑùºóÀ´ÕßÔĶÁ´úÂëʱ¾ÍÄÜÊ¡Á¦ºÜ¶à¡£
ÿһ¸ödelegate¶¼°Ñ¶ÔÓ¦µÄprotocolÃû×Ö´øÉÏ£¬delegate·½·¨²»Òªµ½´¦ÂÒд£¬Ð´µ½Ò»¿éÇøÓòÀïÃæÈ¥
±ÈÈçUITableViewDelegateµÄ·½·¨¼¯¾ÍÀÏÀÏʵʵдÉÏ#pragma mark - UITableViewDelegate¡£ÕâÑùÓиöºÃ´¦¾ÍÊÇ£¬µ±ÆäËûÈËÔĶÁÒ»¸öËû²¢²»ÊìϤµÄDelegateʵÏÖ·½·¨Ê±£¬ËûÖ»Òª°´×¡commandÈ»ºóÈ¥µãÕâ¸öprotocolÃû×Ö£¬Xcode¾ÍÄܹ»Á¢¿ÌÌø×ªµ½¶ÔÓ¦Õâ¸öDelegateµÄprotocol¶¨ÒåµÄÄDz¿·Ö´úÂëÈ¥£¬¾ÍÊ¡µÃËûµ½´¦ÕÒÁË¡£
event responseרÃÅ¿ªÒ»¸ö´úÂëÇøÓò
ËùÓÐbutton¡¢gestureRecognizerµÄÏìӦʼþ¶¼·ÅÔÚÕâ¸öÇøÓòÀïÃæ£¬²»Òªµ½´¦ÂÒ·Å¡£
¹ØÓÚprivate methods£¬Õý³£Çé¿öÏÂViewControllerÀïÃæ²»Ó¦¸Ãд
²»ÊÇdelegate·½·¨µÄ£¬²»ÊÇevent response·½·¨µÄ£¬²»ÊÇlife cycle·½·¨µÄ£¬¾ÍÊÇprivate methodÁË¡£¶ÔµÄ£¬Õý³£Çé¿öÏÂViewControllerÀïÃæÒ»°ãÊDz»»á´æÔÚprivate methodsµÄ£¬Õâ¸öprivate methodsÒ»°ãÊÇÓÃÓÚÈÕÆÚ»»Ë㡢ͼƬ²Ã¼ôɶµÄÕâÖÖС¹¦ÄÜ¡£ÕâÖÖС¹¦ÄÜҪô°ÑËüд³ÉÒ»¸öcategory£¬ÒªÃ´°ÑËû×ö³ÉÒ»¸öÄ£¿é£¬ÄÄÅÂÕâ¸öÄ£¿éÖ»ÓÐÒ»¸öº¯ÊýÒ²ÐС£
ViewController»ù±¾ÉÏÊǴ󲿷ÖÒµÎñµÄÔØÌ壬±¾Éí´úÂëÒѾÏ൱¸´ÔÓ£¬ËùÒÔ¸úÒµÎñ¹ØÁª²»´óµÄ¶«Î÷Äܲ»·ÅÔÚViewControllerÀïÃæ¾Í²»Òª·Å¡£ÁíÍâÒ»µã£¬Õâ¸öprivate methodµÄ¹¦ÄÜÕâʱºòÖ»ÊÇÄãÓõõ½£¬µ«Êǽ«À´Ëµ²»¶¨±ðµÄµØ·½Ò²»áÓõ½£¬Ò»¿ªÊ¼¾Í¶ÀÁ¢³öÀ´£¬ÓÐÀûÓÚ½«À´µÄ´úÂ븴Óá£
ΪʲôҪÕâÑùÒªÇó£¿
ÎÒ¼û¹ýÎÞÊýViewController£¬´úÂë²¼¾ÖÂÒµÃÒ»ËúºýÍ¿£¬ÕâÀïÒ»¸ödelegateÄÇÀïÒ»¸ögetter£¬È»ºóViewControllerµÄ´úÂëÒ»°ã¶¼ËÀ³¤ËÀ³¤µÄ£¬¿´Á˾ÍÈÃÈËÍ·ÌÛ¡£
¶¨ÒåºÃÕâ¸ö¹æ·¶£¬¾ÍÄÜʹµÃViewControllerÌõÀíÇåÎú£¬ÒµÎñ·½³ÌÐòÔ±ºÜÄܹ»Çø·ÖÄÄЩ·ÅÔÚViewControllerÀïÃæ±È½ÏºÏÊÊ£¬ÄÄЩ²»ºÏÊÊ¡£ÁíÍ⣬Ҳ¿ÉÒÔÌá¸ß´úÂëµÄ¿Éά»¤ÐԺͿɶÁÐÔ¡£
¹ØÓÚViewµÄ²¼¾Ö
ÒµÎñ¹¤³ÌʦÔÚдViewµÄʱºòÒ»¶¨ÌÓ²»µôµÄ¾ÍÊÇÕâ¸öÃüÌâ¡£ÓÃFrameÒ²ºÃÓÃAutolayoutÒ²ºÃ£¬Èç¹ûûÓо«ÐÄÉè¼Æ¹ý£¬²¼¾Ö²¿·ÖÒ»¶¨²Ò²»È̶á£
Ö±½ÓʹÓÃCGRectMakeµÄ»°¿É¶ÁÐԺܲ¹â¿´ÄǼ¸¸öÊý×Ö£¬Ò²ÎÞ·¨ÖªµÀviewºÍviewÖ®¼äµÄλÖùØÏµ¡£ÓÃAutolayout¿É¶ÁÐÔÉÔ΢ºÃµã¶ù£¬µ«Éú³ÉConstraintµÄ³¤¶ÈʵÔÚÌ«³¤£¬´úÂë¹Û¸Ð²»Ì«ºÃ¡£
AutolayoutÕâ±ß¿ÉÒÔ¿¼ÂÇʹÓÃMasonry£¬´úÂëµÄ¿É¶ÁÐÔ¾ÍÄܺúܶࡣÈç¹û»¹ÓÐʹÓÃFrameµÄ£¬¿ÉÒÔ¿¼ÂÇÒ»ÏÂʹÓÃÕâ¸öÏîÄ¿¡£
Õâ¸öÏîÄ¿ÀïÃæÌṩÁËFrameÏà¹ØµÄ·½±ã·½·¨(UIView+LayoutMethods)£¬ÀïÃæµÄ·½·¨Ò²»ù±¾º¸ÇÁËËùÓв¼¾ÖµÄÐèÇ󣬿ɶÁÐԷdz£ºÃ£¬Ê¹ÓÃËüÖ®ºó»ù±¾¿ÉÒÔºÍCGRectMake˵ÔÙ¼ûÁË¡£ÒòΪÌìèÔÚ×î½ü²ÅÇл»µ½Ö§³ÖiOS6£¬ËùÒÔ֮ǰÌìè¶¼ÊÇÓÃFrame²¼¾ÖµÄ£¬ÔÚÌìèAppÖУ¬Ê×Ò³£¬·¶¶ù²¿·ÖÒ³ÃæµÄ²¼¾Ö¾ÍʹÓÃÁËÕâЩ·½·¨¡£Ê¹ÓÃÕâЩ·½±ã·½·¨ÄÜÆðµ½Ê°빦±¶µÄЧ¹û¡£
Õâ¸öÏîĿҲÌṩÁËAutolayout·½°¸ÏÂÉú²úConstraintsµÄ·½±ã·½·¨(UIView+AEBHandyAutoLayout)£¬¿É¶ÁÐÔ±ÈÔÉúºÃºÜ¶à¡£ÎÒµ±Ê±ÔÚдÕâϵÁз½·¨µÄʱºò»¹²»ÖªµÀÓÐMasonry¡£ÖªµÀÓÐMasonryÖ®ºóÎÒÌØµØÈ¥¿´ÁËһϣ¬·¢ÏÖMasonry¹¦ÄܹûȻǿ´ó¡£²»¹ýÕâϵÁз½·¨ËäȻûÓÐMasonryÄÇôǿ´ó£¬µ«ÊÇÒ²¹»ÓÃÁË¡£µ±Ê±°²¾Ó¿ÍiPad°æAppÈ«²¿¶¼ÊÇAutolayoutÀ´×öµÄView²¼¾Ö£¬¾ÍÊÇʹÓõÄÕâ¸öÏîÄ¿ÀïÃæµÄ·½·¨¡£¿É¶ÁÐԺܺá£
ÈÃÒµÎñ¹¤³ÌʦʹÓÃÁ¼ºÃµÄ¹¤¾ßÀ´×öViewµÄ²¼¾Ö£¬ÄÜÌá¸ßËûÃǵŤ×÷ЧÂÊ£¬Ò²ÄܼõÉÙbug·¢ÉúµÄ¼¸ÂÊ¡£¼Ü¹¹Ê¦²»¹âÒª¹ØÐÄÄÇЩ¸ß´óÉϵÄÄÚÈÝ£¬Ò²Òª¶à¸øÒµÎñ¹¤³ÌʦÌṩ·½±ãÒ×ÓõÄС¹¤¾ß£¬²ÅÄÜ·¢»Ó¼Ü¹¹Ê¦µÄ¼ÛÖµ¡£
ºÎʱʹÓÃstoryboard£¬ºÎʱʹÓÃnib£¬ºÎʱʹÓôúÂëдView
Õâ¸öÎÊÌâÌÆÇɵIJ©¿ÍÀïÕâÆªÎÄÕÂÒ²Ìáµ½¹ý£¬ÎÒµÄÒâ¼ûºÍËûÊÇ»ù±¾Ò»Öµġ£
ÔÚÕâÀïÎÒ»¹Ïë²¹³äһЩÄÚÈÝ£º
¾ßÓÐÒ»¶¨¹æÄ£µÄÍŶӻ¯iOS¿ª·¢£¨10ÈËÒÔÉÏ£©ÓÐÒÔϼ¸¸öÌØµã£º
- ͬһ·Ý´úÂëÎļþµÄ×÷Õß»áÓкܶ࣬²»Í¬×÷ÕßͬʱÐÞ¸Äͬһ·Ý´úÂëµÄÇé¿öÒ²²»ÉÙ¼û¡£Òò´Ë£¬Ê¹ÓÃGit½øÐдúÂë°æ±¾¹ÜÀíʱ³öÏÖConflictµÄ¼¸ÂÊÒ²±È½Ï´ó¡£
- ÐèÇó±ä»¯·Ç³£Æµ·±£¬²úÆ·¾Àíһʱһ¸öÖ÷Ò⣬ΪÁËÍê³ÉÐèÇó¶øÕë¶ÔÏÖÓдúÂë½øÐÐ΢µ÷µÄÇé¿ö£¬ÒÔ¼°Õë¶ÔÏÖÓдúÂëµÄ²¿·Ö¸´ÓõÄÇé¿öÒ²±È½Ï¶à¡£
- ¸´ÔÓ½çÃæÔªËØ¡¢¸´ÔÓ¶¯»³¡¾°µÄ¿ª·¢ÈÎÎñ±È½Ï¶à¡£
Èç¹ûÕâÈý¸öÌØµãÄãÒ»¿´¾ÍÃ÷°×ÁË£¬ÏÂÃæµÄ½âÊ;ͿÉÒÔ²»Óÿ´ÁË¡£Èç¹ûÄãÕë¶ÔÎÒµÄÇãÏòÔ¸Òâ½øÒ»²½ÌÖÂ۵ģ¬¿ÉÒÔÏÈ¿´ÎÒÏÂÃæµÄ½âÊÍ£¬¿´ÍêÔÙ˵¡£
ͬһ·Ý´úÂëÎļþµÄ×÷Õß»áÓкܶ࣬²»Í¬×÷ÕßͬʱÐÞ¸Äͬһ·Ý´úÂëµÄÇé¿öÒ²²»ÉÙ¼û¡£Òò´Ë£¬Ê¹ÓÃGit½øÐдúÂë°æ±¾¹ÜÀíʱ³öÏÖConflictµÄ¼¸ÂÊÒ²±È½Ï´ó¡£
iOS¿ª·¢¹ý³ÌÖУ¬»áÓöµ½×îµ°ÌÛµÄÁ½ÖÖConflictÒ»¸öÊÇproject.pbxproj£¬ÁíÍâÒ»¸ö¾ÍÊÇStoryBoard»òXIB¡£ÒòΪÕâЩÎļþµÄÄÚÈݵĿɶÁÐԷdz£²î£¬ËäȻƻ¹ûÔÚXCode5£¨ÏÖÔÚÎÒÓе㲻ȷ¶¨ÊDz»ÊÇÕâ¸ö°æ±¾ÁË£©ÖжÔStoryBoardµÄÎļþÃèÊö·½Ê½×öÁËÒ»¶¨µÄÓÅ»¯£¬µ«Ö»ÊǰѿɶÁÐԴӷdz£²îÌáÉýΪºÜ²î¡£
È»¶øÔÚStoryBoardÖÐÍùÍù°üº¬Á˶à¸öÒ³Ãæ£¬ÕâÐ©Ò³Ãæ»ù±¾Éϲ»Ì«¿ÉÄܶ¼ÓÉÒ»¸öÈËÈ¥Íê³É£¬Èç¹ûÁíÒ»¸öÈËÔÚ×öStoryBoardµÄ²Ù×÷µÄʱºò£¬³öÓÚijЩĿµÄ¶¯ÁËһϲ»ÊôÓÚËûµÄÄǸöÒ³Ãæ£¬±ÈÈçΪÁËÃÀ¹Ûµ÷ÕûÁËÒ»ÏÂλÖá£È»ºóÁíÍâÒ»¸öÈËÒ²ÒòΪҪÌí¼ÓÒ»¸öÒ³Ãæ£¬¶øÔÚStoryboardÖе÷ÕûÁËÒ»ÏÂij¸öÆäËûÒ³ÃæµÄλÖá£ÄÇôÕë¶ÔÕâ¸öÇé¿öÎÒ³ýÁË˵¸öºÇºÇÒÔÍ⣬ÎÒ¾ÍÖ»ÄÜ˵£º×£ÄãºÃÔË¡£¿´Çå³þŶ£¬Õ⻹û¶¯¾ßÌåµÄÒ³Ò³ÃæÄÚÈÝÄØ¡£
µ«Èç¹ûʹÓôúÂë»æÖÆView£¬ConflictÒ»Ñù»á·¢Éú£¬µ«ÊÇÕâÖÖConflict¾ÍºÃ½âºÜ¶àÁË£¬Äã¶®µÄ¡£
ÐèÇó±ä»¯·Ç³£Æµ·±£¬²úÆ·¾Àíһʱһ¸öÖ÷Ò⣬ΪÁËÍê³ÉÐèÇó¶øÕë¶ÔÏÖÓдúÂë½øÐÐ΢µ÷µÄÇé¿ö£¬ÒÔ¼°Õë¶ÔÏÖÓдúÂëµÄ²¿·Ö¸´ÓõÄÇé¿öÒ²±È½Ï¶à¡£
ÎÒ¾õµÃ²úÆ·¾Àíһʱһ¸öÖ÷Òâ²»ÊÇËûµÄ´í£¬Ëû˵²»¶¨Ò²ÊDZ»±ÆµÄ£¬±ÈÈç˶¼»áÀ´²ôºÍһϲúÆ·µÄÉè¼Æ£¬¹«Ë¾ÀïµÄËùÓÐÈË£¬ÉÏÖÁCEO£¬ÏÂÖÁ»ù²ãÔ±¹¤¶¼ÓпÉÄܶԲúÆ·Éè¼ÆÆÀÍ·ÂÛ×㣬ֻҪËû¸öÈËÓиöµØ·½Óõò»Ë¬£¨¼«´ó¿ÉÄÜÊǸöÈËϲºÃ£©È»ºóÓÖÕýºÃ¸ú²úÆ·¾Àí±È½ÏÊìϤÄܹ»´îµÃÉÏ»°£¬¶¼»áÌá³ö¸÷ÖÖÒâ¼û¡£²úÆ·¾Àí¶ã²»ÆðÒ²ÈDz»Æð£¬ÓÐʱҲÊÇû°ì·¨£¬àÅ¡£
µ«Âäʵµ½¹¤³ÌʦÕâ±ßÀ´£¬ÕâÖÖÇé¿ö¾ÍºÜµ°ÌÛ¡£ÒòΪÕâÖָıäÓÐʱºò²»¹âÊÇUI£¬UIËù¶ÔÓ¦µÄÂß¼Ò²ÓÐÒª¸ÄµÄ¿ÉÄÜ£¬¹¤³Ìʦ¾Í»áÁ½±ßÎļþ¶¼¸Ä£¬ÄãÔÀ´linkµÄÄǸöviewÏÖÔÚ²»linkÁË£¬È»ºóÄãµÄoutlet¶ÔӦҲҪɾµô£¬ÕâÁ½²¿·ÖÖ»ÒªÓÐÒ»¸öû×ö£¬±àÒëͨ¹ýÖ®ºóÅÜÒ»ÏÂApp£¬Ò»»á¶ù¾ÍcrashÁË¡£¿´ÆðÀ´Õâ²»ÊÇʲô´óʶù£¬µ«ºÜÓ°ÏìÐÄÇé¡£
ÁíÍ⣬Èç¹û³öÏÖ²¿·ÖµÄ´úÂ븴Ó㬱ÈÈçËµÄ³Ò³ÃæÏÂij¸öViewҲϣÍû·ÅÔÚÁíÍâÒ»¸öÒ³ÃæÀÏà¹ØµÄ²Ù×÷¾Í²»ÊǸ´ÖÆÕ³ÌùÕâô¼òµ¥ÁË£¬Ä㻹µÃÖØÐÂlinkÒ»±é¡£Ò²ºÜÓ°ÏìÐÄÇé¡£
¸´ÔÓ½çÃæÔªËØ£¬¸´ÔÓ¶¯»½»»¥³¡¾°µÄ¿ª·¢ÈÎÎñ±È½Ï¶à¡£
ÒªÊÇÏëÔÚ»ùÓÚStoryBoardµÄÏîÄ¿ÖÐ×öÒ»¸ö¶¯»£¬ºÜ·³¡£×ö¼¸¸ö¸´ÔÓ½çÃæÔªËØ£¬Ò²ºÜ·³¡£ÓеÄʱºòÎÒÃǹÒCustom ViewÉÏÈ¥£¬ÆäʵÔÚStoryBoardÀïÃæ¿´À´¾ÍÊÇÒ»¸ö¿Õ°×View¡£È»ºóÁíÍâÒ»µã¾ÍÊÇ£¬µ±ÄãµÄlayout³öÏÖÎÊÌâÐèÒªµ÷ÕûµÄʱºò£¬»¹ÊÇͦÄÑÕÒµ½ÎÊÌâËùÔڵģ¬ÓÈÆäÊÇÔÚ¸´ÔÓ½çÃæÔªËØµÄÇé¿öÏ¡£
ËùÒÔÔÚÕë¶ÔView²ãÕâ±ßµÄÒªÇóʱ£¬ÎÒÒ²Êǽ¨Òé²»ÒªÓÃStoryBoard¡£ÊµÏÖ¼òµ¥µÄ¶«Î÷£¬ÓÃCodeÒ»Ñù¼òµ¥£¬ÊµÏÖ¸´ÔӵĶ«Î÷£¬Code±ÈStoryBoard¸ü¼òµ¥¡£ËùÒÔÎÒ¸ü¼ÓÌᳫÓÃcodeÈ¥»view¶ø²»ÊÇstoryboard¡£
ÊÇ·ñÓбØÒªÈÃÒµÎñ·½Í³Ò»ÅÉÉúViewController
ÓеÄʱºòÎÒÃdzöÓڼǼÓû§²Ù×÷ÐÐΪÊý¾ÝµÄÐèÒª£¬»òÕßͳһÅäÖÃÒ³ÃæµÄÄ¿µÄ£¬»á´ÓUIViewControllerÀïÃæÅÉÉúÒ»¸ö×Ô¼ºµÄViewController£¬À´Ö´ÐÐһЩͨÓÃÂß¼¡£±ÈÈçÌìè¿Í»§¶ËÒªÇóËùÓеÄViewController¶¼Òª¼Ì³Ð×ÔTMViewController¡£Õâ¸öͳһµÄ¸¸ÀàÀïÃæÕë¶ÔÒ»¸öViewControllerµÄËùÓÐÉúÃüÖÜÆÚ¶¼×öÁËһЩÉèÖã¬ÖÁÓÚÕâÀï¶¼ÓÐÄÄЩÉèÖöÔÓÚ±¾ÆªÎÄÕÂÀ´Ëµ²¢²»ÖØÒª¡£ÔÚÕâÀïÎÒÏëÌÖÂÛµÄÊÇ£¬ÔÚÉè¼ÆView¼Ü¹¹Ê±£¬Èç¹ûΪÁËÄܹ»´ïµ½Í³Ò»ÉèÖûòÖ´ÐÐͳһÂß¼µÄÄ¿µÄ£¬Ê¹ÓÃÅÉÉúµÄÊÖ¶ÎÊÇÓбØÒªµÄÂð£¿
ÎÒ¾õµÃûÓбØÒª£¬ÎªÊ²Ã´Ã»ÓбØÒª£¿
- ʹÓÃÅÉÉú±È²»Ê¹ÓÃÅÉÉú¸üÈÝÒ×Ôö¼ÓÒµÎñ·½µÄʹÓóɱ¾
- ²»Ê¹ÓÃÅÉÉúÊÖ¶ÎÒ»ÑùÒ²ÄܴﵽͳһÉèÖõÄÄ¿µÄ
ÕâÁ½ÌõÔÒòÊÇÎÒÈÏΪûÓбØÒªÊ¹ÓÃÅÉÉúÊֶεÄÀíÓÉ£¬Èç¹ûÁ½ÌõÀíÓÉÄã¶¼ÐÄÁìÉñ»á£¬ÄÇôÏÂÃæµÄ¾Í¿ÉÒÔ²»Óÿ´ÁË¡£Èç¹ûÄ㻹ÓеãÒÉ»ó£¬Çë¿´ÏÂÃæÎÒÀ´Ïêϸ½²Ò»ÏÂÔÒò¡£
ΪʲôʹÓÃÁËÅÉÉú£¬ÒµÎñ·½µÄʹÓóɱ¾»áÌáÉý£¿
Æäʵ²»¹âÊÇÒµÎñ·½µÄʹÓóɱ¾£¬¼Ü¹¹µÄά»¤³É±¾Ò²»áÉÏÉý¡£ÄÇô¾ßÌåµÄ³É±¾¶¼À´×ÔÓÚÄÄÀïÄØ£¿
ÕâÀï½²µÄ¼¯³É³É±¾ÊÇÕâÑùµÄ£ºÈç¹ûÒµÎñ·½×Ô¼º¿ªÁËÒ»¸ö¶ÀÁ¢demo£¬¿ìËÙÍê³ÉÁËij¸ö¶ÀÁ¢Á÷³Ì£¬ÏÖÔÚËûÏë°ÑÕâ¸öÏÖÓÐÁ÷³Ì¼¯ºÏ½øÈ¥¡£ÄÇôÎÊÌâ¾ÍÀ´ÁË£¬ËûÐèÒª°ÑËùÓжÀÁ¢µÄUIViewController¸Ä±ä³ÉTMViewController¡£ÄÇΪʲô²»ÊÇÒ»¿ªÊ¼¾ÍÁ¢¿ÌʹÓÃTMViewControllerÄØ£¿ÒòΪҪÏëÒýÈëTMViewController£¬¾ÍÒªÒýÈëÕû¸öÌìèAppËùÓеÄÒµÎñÏߣ¬ËùÓеĻù´¡¿â£¬ÒòΪÕâ¸ö¸¸ÀàÀïÃæÉæ¼°ºÜ¶àÌìè»·¾³²ÅÓеÄÄÚÈÝ£¬Ëùν°Î³öÂܲ·´ø³öÄ࣬ÄãÒªÊÇÏë¼òµ¥¼Ì³ÐһϾÍÄܸ㶨µÄÊÂÇ飬´î»·¾³¾ÍÒª¸ã°ëÌ죬ȻºóÕâ¸öСDemo²ÅÄÜÅÜµÃÆðÀ´¡£
¶ÔÓÚÒµÎñ²ã´æÔÚµÄËùÓи¸ÀàÀ´Ëµ£¬ËüÃÇÊǺÜÈÝÒ׸úÏîÄ¿ÖÐµÄÆäËû´úÂë¾À²ø²»ÇåµÄ£¬ÕâʹµÃÒµÎñ·½¿ª·¢Ê±Óöµ½Ò»¸öÁ½ÄÑÎÊÌ⣺Ҫô°ÑËùÓÐÒÀÀµÈ«²¿¸ã¶¨£¬È»ºó»ùÓÚApp»·¾³£¨±ÈÈçÌì裩Ͽª·¢Demo£¬ÒªÃ´¾ÍÊÇ×Ô¼ºDemoдºÃÖ®ºó£¬°´ÕÕ»·¾³ÒªÇó¸Ä´úÂë¡£ÕâÀïµÄÁ½ÄÑÎÊÌâ¶¼»á´øÀ´³É±¾£¬¶¼»áÓ°ÏìÒµÎñ·½µÄµü´ú½ø¶È¡£
ÎÒ²»È·¶¨¸÷λËùÔÚ¹«Ë¾ÊÇ·ñ»áÓÐÕâÑùµÄÇé¿ö£¬µ«ÎÒ¿ÉÒÔÔÚÕâÀï¸ø´ó¼Ò¾ÙÒ»¸öÎÒÔÚ°¢ÀïµÄÕæÊµµÄÀý×Ó£ºÎÒ×î½üÔÚ¿ª·¢Ä³Â˾µDemoºÍÏà¹ØÒ³ÃæÁ÷³Ì£¬×îÖÕÊÇÒªºÏ²¢µ½ÌìèÕâ¸öAppÀïÃæÈ¥µÄ¡£Ê¹ÓÃÌìè»·¾³½øÐпª·¢µÄ»°£¬pod installÍêËùÓÐÒÀÀµ²î²»¶àÐèÒª10·ÖÖÓ£¬È»ºó´ò¿ªworkspaceÖ®ºó£¬²î²»¶àÒªÔٵȴý1·ÖÖÓÈÃxcode×öºÃË÷Òý£¬È»ºó²ÅÄÜÕýʽ¿ªÊ¼¹¤×÷¡£ÔÚÕâÀïÒª¸ÐлһÏÂÔòƽ£¬ÒòΪËûÔÚ´Ë»ù´¡ÉÏ×öÁ˺ܶàÓÅ»¯£¬Ê¹µÃÕâ¸ö1·ÖÖÓÒѾ±ÈÔÀ´µÄʱ¼ä¶ÌºÜ¶àÁË¡£µ«Èç¹ûÌìè»·¾³ÓиüУ¬Äã¾ÍÒªÔÙÖØ¸´Ò»´ÎÉÏÃæµÄÁ÷³Ì£¬·ñÔò ¾ÍºÜÓпÉÄܱàÒë²»¹ý¡£
°ÝÍУ¬ÎÒÖ»ÊÇÏë×ö¸öDemo¶øÒÑ£¬²»Ïë¸ãÄÇô¸´ÔÓ¡£
ÐÂÀ´µÄÒµÎñ¹¤³ÌʦÓеÄʱºò²»¼ûµÃ¶¼¼ÇµÃÿһ¸öViewController¶¼±ØÐëÒªÅÉÉú×ÔTMViewController¶ø²»ÊÇÖ±½ÓµÄUIViewController¡£ÐÂÀ´µÄ¹¤³ÌʦËû²»ÄÜÖ±½Ó°´ÕÕÆ»¹ûÔÉúµÄ×ö·¨È¥×öÊÂÇ飬ËûÐèÒª¶îÍâѧϰ£¬±ÈÈç˵£ºËùÓеÄViewController¶¼±ØÐë¼Ì³Ð×ÔTMViewController¡£
¾¡¿ÉÄÜÉÙµØÊ¹Óü̳ÐÄÜÌá¸ßÏîÄ¿µÄ¿Éά»¤ÐÔ£¬¾ßÌåÄÚÈÝÎÒÔÚ¡¶Ìø³öÃæÏò¶ÔÏó˼Ï루һ£© ¼Ì³Ð¡·ÀïÃæËµÁË£¬ÔÚÕâÀïÎÒÏë͵ÀÁ²»Ïë°ÑÄÇÆªÎÄÕÂÀï˵¹ýµÄ¶«Î÷ÔÙ˵һ±é¡£
Æäʵ¶ÔÓÚÒµÎñ·½À´Ëµ£¬Ö÷Òª»¹ÊǵÚÒ»¸ö¼¯³É³É±¾±È½Ïµ°ÌÛ£¬ÒòΪÕâÊdz¤Í´£¬Ã¿´ÎÒª×öµãʲôÊÂÇé¶¼»áÓöµ½¡£µÚ¶þµãµ¹»¹ºÃ£¬¶ÌÍ´¡£µÚÈýµã¸úÒµÎñ¹¤³Ìʦûɶ¹ØÏµ¡£
ÄÇôÈç¹û²»Ê¹ÓÃÅÉÉú£¬ÎÒÃÇÓ¦¸ÃʹÓÃʲôÊֶΣ¿
ÎҵĽ¨ÒéÊÇʹÓÃAOP¡£
Ôڼܹ¹Ê¦ÊµÏÖ¾ßÌåµÄ·½°¸Ö®Ç°£¬±ØÐëÒªÏëÇå³þ¼¸¸öÎÊÌ⣬Ȼºó²ÅÄܾö¶¨²ÉÓÃÄÄÖÖ·½°¸¡£ÊÇÄöÎÊÌ⣿
- ·½°¸µÄЧ¹û£¬ºÍ×îÖÕÒª´ïµ½µÄÄ¿µÄÊÇʲô£¿
- ÔÚ×Ô¼ºµÄ֪ʶÌåϵÀïÃæ£¬ÊÇ·ñ¾ß±¸ÊµÏÖÕâ¸ö·½°¸µÄÄÜÁ¦£¿
- ÔÚÒµ½çÒÑÓеĿªÔ´×é¼þÀïÃæ£¬ÊÇ·ñÓпÉÒÔÖ±½ÓÄÃÀ´ÓõÄÂÖ×Ó£¿
ÕâÈý¸öÎÊÌâ°´ÕÕ˳ÐòÒ»Ò»½â´ðÖ®ºó£¬¾ßÌå·½°¸¾ÍÄܳöÀ´ÁË¡£
ÎÒÃÇÏÈ¿´µÚÒ»¸öÎÊÌ⣺·½°¸µÄЧ¹û£¬ºÍ×îÖÕÒª´ïµ½µÄÄ¿µÄÊÇʲô£¿
·½°¸µÄЧ¹ûÓ¦¸ÃÊÇ£º
- ÒµÎñ·½¿ÉÒÔ²»ÓÃͨ¹ý¼Ì³ÐµÄ·½·¨£¬È»ºó¿ò¼ÜÄܹ»×öµ½¶ÔViewControllerµÄͳһÅäÖá£
- ÒµÎñ·½¼´Ê¹ÍÑÀë¿ò¼Ü»·¾³£¬²»ÐèÒªÐÞ¸ÄÈκδúÂëÒ²Äܹ»ÅÜÍê´úÂë¡£ÒµÎñ·½µÄViewControllerÒ»µ©¶ªÈë¿ò¼Ü»·¾³£¬²»ÐèÒªÐÞ¸ÄÈκδúÂ룬¿ò¼Ü¾ÍÄܹ»Æðµ½ËüÓ¦¸ÃÆðµÄ×÷Óá£
Æäʵ¾ÍÊÇҪʵÏÖ²»Í¨¹ýÒµÎñ´úÂëÉ϶Կò¼ÜµÄÖ÷¶¯ÓºÏ£¬Ê¹µÃÒµÎñÄܹ»±»¿ò¼Ü¸ÐÖªÕâÑùµÄ¹¦ÄÜ¡£Ï¸»¯ÏÂÀ´¾ÍÊÇÁ½¸öÎÊÌ⣬¿ò¼ÜÒªÄܹ»À¹½Øµ½ViewControllerµÄÉúÃüÖÜÆÚ£¬ÁíÒ»¸öÎÊÌâ¾ÍÊÇ£¬À¹½ØµÄ¶¨Òåʱ»ú¡£
¶ÔÓÚ·½·¨À¹½Ø£¬ºÜÈÝÒ×Ïëµ½Method Swizzling£¬ÄÇôÎÒÃÇ¿ÉÒÔдһ¸öʵÀý£¬ÔÚAppÆô¶¯µÄʱºòÌí¼ÓÕë¶ÔUIViewControllerµÄ·½·¨À¹½Ø£¬ÕâÊÇÒ»ÖÖ×ö·¨¡£»¹ÓÐÁíÒ»ÖÖ×ö·¨¾ÍÊÇ£¬Ê¹ÓÃNSObjectµÄloadº¯Êý£¬ÔÚÓ¦ÓÃÆô¶¯Ê±×Ô¶¯¼àÌý¡£Ê¹ÓúóÕߵĺô¦ÔÚÓÚ£¬Õâ¸öÄ£¿éÖ»Òª±»ÏîÄ¿°üº¬£¬¾ÍÄܹ»·¢»Ó×÷Ó㬲»ÐèÒªÔÚÏîÄ¿ÀïÃæÌí¼ÓÈκδúÂë¡£
È»ºóÁíÍâÒ»¸öÒª¿¼ÂǵÄÊÂÇé¾ÍÊÇ£¬ÔÓеÄTMViewController£¨ËùνµÄ¸¸ÀࣩҲÊÇ»áÌṩ¶îÍâ·½·¨·½±ã×ÓÀàʹÓõģ¬Method SwizzlingÖ»Ö§³ÖÕë¶ÔÏÖÓз½·¨µÄ²Ù×÷£¬ÍØÕ¹·½·¨µÄ»°£¬àÅ£¬µ±È»ÊÇÓÃCategoryÀ²¡£
ÎÒ±¾È˲»ÔÞ³ÉCategoryµÄ¹ý¶ÈʹÓ㬵«¼øÓÚCategoryÊÇ×îµäÐ͵ϝ¼Ì³ÐΪ×éºÏµÄÊֶΣ¬ÔÚÕâ¸ö³¡¾°Ï»¹ÊÇÊʺÏʹÓõġ£»¹ÓеľÍÊÇ£¬¹ØÓÚMethod SwizzlingÊÖ¶ÎʵÏÖ·½·¨À¹½Ø£¬Òµ½çÒ²ÒѾÓÐÁËÏֳɵĿªÔ´¿â£ºAspects£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓÄÃÀ´Ê¹Óá£
ÎÒÕâ±ßÓиö·Ç³£·Ç³£Ð¡µÄDemo¿ÉÒԷųöÀ´¸ø´ó¼Ò£¬Õâ¸öDemoÖ»ÊÇÒ»¸öµã¾¦Ö®±Ê£¬ÓÐһЩ»°ÎÒҲдÔÚÕâ¸öDemoÀïÃæÁË£¬¸÷λ¼Ü¹¹Ê¦ÃÇÄãÃÇ¿ÉÒÔ»ùÓÚ¸÷×Ô¹«Ë¾AppµÄÐèÇóÈ¥ÍØÕ¹¡£
Õâ¸öDemo²»°üº¬Category£¬±Ï¾¹Category»¹ÊǵÃÄãÃÇ×Ô¼ºÈ¥Ð´°¡¡«È»ºóÕâÌ×·½°¸Äܹ»Íê³ÉÔÀ´Í¨¹ýÅÉÉúÊÖ¶ÎËùÓпÉÒÔÍê³ÉµÄÈÎÎñ£¬µ«Í¬Ê±ÓÖÔÊÐíÒµÎñ·½²»±ØÌí¼ÓÈκδúÂ룬ֱ½ÓʹÓÃÔÉúµÄUIViewController¡£
È»ºóÁíÍâÒªÌáÐѵÄÊÇ£¬Õâ·½°¸µÄÄ¿µÄÊÇÏû³ý²»±ØÒªµÄ¼Ì³Ð£¬ËäÈ»²»ÏÞ¶¨ÓÚUIViewController£¬µ«ËüÒ²ÊÇÓÐÊÊÓ÷¶Î§µÄ£¬ÔÚÊÊÓü̳еĵط½£¬»¹ÊÇÒªÀÏÀÏʵʵʹÓü̳С£±ÈÈçÄãÓÐÒ»¸öÊý¾ÝÄ£ÐÍ£¬ÊÇÓÉ»ù±¾Ä£ÐÍÅÉÉú³öµÄÒ»ÕûÌ×Ä£ÐÍ£¬ÄÇôÕâ¸öʱºò»¹ÊÇÀÏÀÏʵʵʹÓü̳С£ÖÁÓÚÄÃÄóºÎʱʹÓü̳У¬ÏàП÷λ¼Ü¹¹Ê¦Ò»¶¨Äܹ»´¦ÀíºÃ£¬»òÕßÄãÒ²¿ÉÒԲο¼ÎÒÇ°ÃæÌáµ½µÄÄÇÆªÎÄÕÂÀ´¿ØÖÆÄÃÄóµÄ³ß¶È¡£
¹ØÓÚMVC¡¢MVVMµÈÒ»´ó¶Ñ˼Ïë
ÆäʵÕâЩ¶¼ÊÇÏà¶ÔͨÓõÄ˼Ï룬Íò±ä²»ÀëÆä×ڵϹÊÇÔÚ¿ªÆªÀïÃæÎÒÌáµ½µÄÄÇÈý¸ö½ÇÉ«£ºÊý¾Ý¹ÜÀíÕߣ¬Êý¾Ý¼Ó¹¤Õߣ¬Êý¾ÝչʾÕß¡£ÕâЩÎ廨°ËÃŵÄ˼Ï룬²»Íâºõ¾ÍÊÇÖÆ¶©ÁËÒ»¸ö¹æ·¶£¬¹æ¶¨ÁËÕâÈý¸ö½ÇɫӦµ±ÈçºÎ½øÐÐÊý¾Ý½»»»¡£µ«Í¬Ê±ÕâЩҲÊÇÕùÒé×î¶àµÄ»°Ì⣬ËùÒÔÎÒÔÚÕâÀïÀ´°Ñ¼¸¸öÖ÷Á÷˼Ïë×öÒ»¸öÊáÀí£¬µ±ÄãÔÚ×öView²ã¼Ü¹¹Ê±£¬Äܹ»Óиö±È½ÏºÃµÄ²Î¿¼¡£
MVC
MVC£¨Model-View-Controller£©ÊÇ×îÀÏÅÆµÄµÄ˼Ï룬ÀÏÅÆµ½4È˰ïµÄÊéÀï°ÑËü¹é³ÉÁËÒ»ÖÖģʽ£¬ÆäÖÐModel¾ÍÊÇ×÷ΪÊý¾Ý¹ÜÀíÕߣ¬View×÷ΪÊý¾ÝչʾÕߣ¬Controller×÷ΪÊý¾Ý¼Ó¹¤Õߣ¬ModelºÍViewÓÖ¶¼ÊÇÓÉControllerÀ´¸ù¾ÝÒµÎñÐèÇóµ÷Å䣬ËùÒÔController»¹¸ºµ£ÁËÒ»¸öÊý¾ÝÁ÷µ÷ÅäµÄ¹¦ÄÜ¡£ÕýÔÚÎÒдÕâÆªÎÄÕµÄʱºò£¬ÎÒ¿´µ½InfoQ·¢ÁËÕâÆªÎÄÕ£¬ÀïÃæÌáµ½ÁËÒ»¸öÒÆ¶¯¿ª·¢ÖеÄÍ´µãÊÇ£º¶ÔMVC¼Ü¹¹»®·ÖµÄÀí½â¡£ÎÒµ±Ê±Ã»Äܹ»È¥²Î¼ÓÕâ¸ö×ù̸»á£¬Ò²Ã»°ì·¨·¢±í¸öÈËÒâ¼û£¬ËùÒÔ¾ÍÖ»ÄÜÔÚÕâÀïддÁË¡£
ÔÚiOS¿ª·¢ÁìÓò£¬ÎÒÃÇÓ¦µ±ÈçºÎ½øÐÐMVCµÄ»®·Ö£¿
ÕâÀïÃæÆäʵÓÐÁ½¸öÎÊÌ⣺
- ΪʲôÎÒÃÇ»á¾À½áÓÚiOS¿ª·¢ÁìÓòÖÐMVCµÄ»®·ÖÎÊÌ⣿
- ÔÚiOS¿ª·¢ÁìÓòÖУ¬ÔõÑù²ÅËãÊÇ»®·ÖµÄÕýÈ·×ËÊÆ£¿
ΪʲôÎÒÃÇ»á¾À½áÓÚiOS¿ª·¢ÁìÓòÖÐMVCµÄ»®·ÖÎÊÌ⣿
¹ØÓÚÕâ¸ö£¬Ã¿¸öÈ˾À½áµÄµã¿ÉÄܲ»Ì«Ò»Ñù£¬ÎÒÒ²²»ÖªµÀµ±Ê±×ù̸»áÉÏ´ó¼ÒµÄ¹Ûµã¡£µ«ÇëÔÊÐíÎÒ²ÂһϣºÊDz»ÊÇÒòΪUIViewControllerÖÐ×Ô´øÁËÒ»¸öView£¬ÇÒ¿ØÖÆÁËViewµÄÕû¸öÉúÃüÖÜÆÚ£¨viewDidLoad,viewWillAppear...£©£¬¶øÔÚ³£Ê¶ÖÐÎÒÃǶ¼ÖªµÀController²»Ó¦¸ÃºÍViewÓÐÈç´Ë½ôÃܵÄÁªÏµ£¬ËùÒԲŵ¼Ö´ó¼Ò¶Ô»®·Ö²úÉúÀ§»ó£¿£¬ÏÂÃæÎÒ»áÕë¶ÔÕâ¸ö²Â²âÀ´¸ø³öÎÒµÄÒâ¼û¡£
ÔÚ·þÎñ¶Ë¿ª·¢ÁìÓò£¬ControllerºÍViewµÄ½»»¥·½Ê½Ò»°ã¶¼ÊÇÕâÑù£¬±ÈÈçYii£º
/*
...
Êý¾Ý¿âÈ¡Êý¾Ý
...
´¦ÀíÊý¾Ý
...
*/
// ´Ë´¦$this¾ÍÊÇController
$this->render("plan",array(
'planList' => $planList,
'plan_id' => $_GET['id'],
)); |
ÕâÀïControllerºÍViewÖ®¼äÇø·ÖµÃ·Ç³£Ã÷ÏÔ£¬Controller×öÍê×Ô¼ºµÄÊÂÇéÖ®ºó£¬¾Í°ÑËùÓйØÓÚViewµÄ¹¤×÷½»¸øÁËÒ³ÃæäÖȾÒýÇæÈ¥×ö£¬Controller²»»áÈ¥×öÈκιØÓÚViewµÄÊÂÇ飬°üÀ¨Éú³ÉView£¬ÕâЩ¶¼ÓÉäÖȾÒýÇæ´úÀÍÁË¡£ÕâÊÇÒ»¸öÇø±ð£¬µ«Æäʵ·þÎñ¶ËViewµÄ¸ÅÄîºÍNativeÓ¦ÓÃViewµÄ¸ÅÄî£¬ÕæÕýµÄÇø±ðÔÚÓÚ£º´Ó¸ÅÄîÉÏÑϸñ»®·ÖµÄ»°£¬·þÎñ¶ËÆäʵ¸ù±¾Ã»ÓÐView£¬°ÝHTTPÐÒéËù´Í£¬ÎÒÃÇÆ½Ê±ËùÌÖÂÛµÄViewÖ»ÊÇÓÃÓÚÃèÊöViewµÄ×Ö·û´®£¨¸üʵÖʵÄÓ¦¸Ã³ÆÖ®ÎªÊý¾Ý£©£¬ÕæÕýµÄViewÊÇä¯ÀÀÆ÷¡£¡£
ËùÒÔ·þÎñ¶ËÖ»¹ÜÉú³É¶ÔViewµÄÃèÊö£¬ÖÁÓÚ¶ÔViewµÄ³¤Ï࣬UIʼþ¼àÌýºÍ´¦Àí£¬¶¼ÊÇä¯ÀÀÆ÷¸ºÔðÉú³ÉºÍά»¤µÄ¡£µ«ÊÇÔÚNativeÕâ±ßÀ´¿´£¬Ô±¾ÊôÓÚä¯ÀÀÆ÷µÄÈÎÎñÒ²ÌÓ²»µôÒª×Ô¼º×ö¡£ÄÇôÕâ¼þÊÂÇéÓÉËÀ´×ö×îºÏÊÊ£¿Æ»¹û¸ø³öµÄ´ð°¸ÊÇ£ºUIViewController¡£
¼øÓÚÆ»¹ûÔÚÕâÒ»²ã×öÁ˺ܶà¼è¿à׿¾øµÄŬÁ¦£¬ÈÃiOS¹¤³ÌʦÃDz»±ØÇ××ÔȥʵÏÖÕâЩÄÚÈÝ¡£¶øÇÒ£¬Ëü°ÑËùÓеŦÄܶ¼·ÅÔÚÁËUIViewÉÏ£¬²¢ÇÒ°ÑUIView×ö³É²»¹â¿ÉÒÔչʾUI£¬»¹¿ÉÒÔ×÷ΪÈÝÆ÷µÄÒ»¸ö¶ÔÏó¡£
¿´µ½Õâ¶ùÄãÃ÷°×ÁËÂð£¿UIViewµÄÁíÒ»¸öÉí·ÝÆäʵÊÇÈÝÆ÷£¡UIViewControllerÖÐ×Ô´øµÄÄǸöview£¬ËüµÄÖ÷ÒªÈÎÎñ¾ÍÊÇ×÷Ϊһ¸öÈÝÆ÷¡£Èç¹ûËüËùÓеÄÏà¹ØÃüÃû¶¼¸Ä³ÉViewContainer£¬ÄÇô´úÂë¾Í»á±ä³ÉÕâÑù£º
- (void)viewContainerDidLoad
{
[self.viewContainer addSubview:self.label];
[self.viewContainer addSubview:self.tableView];
[self.viewContainer addSubview:self.button];
[self.viewContainer addSubview:self.textField];
}
... ... |
½ö½ö¸ÄÁ˸öÃû×Ö£¬ÏÖÔÚÊDz»ÊǸоõÇåÎúÁ˺ܶࣿÈç¹ûÔÙҪ˵Ïêϸһµã£¬ÎÒÃÇÆ½³£ËùÈÏΪµÄ·þÎñ¶ËMVCÊÇÕâÑù»®·ÖµÄ£º

µ«ÊÂʵÉÏ£¬ÕûÌ×Á÷³ÌµÄMVC»®·ÖÊÇÕâÑù£º

ÓÉͼÖпÉÒÔ¿´³ö£¬ÎÒÃÇ·þÎñ¶Ë¿ª·¢ÔÚÕâ¸ö¸ÅÄîÏ£¬ÆäÊµÖ»Éæ¼°MºÍCµÄ¿ª·¢¹¤×÷£¬ä¯ÀÀÆ÷×÷ΪViewµÄÈÝÆ÷£¬¸ºÔðViewµÄչʾºÍʼþµÄ¼àÌý¡£ÄÇô¶ÔÓ¦µ½iOS¿Í»§¶ËµÄMVC»®·ÖÉÏÃæÀ´£¬¾ÍÊÇÕâÑù£º

Î¨Ò»Çø±ðÔÚÓÚ£¬ViewµÄÈÝÆ÷ÔÚ·þÎñ¶Ë£¬ÊÇÓÉBrowser¸ºÔð£¬ÔÚÕû¸öÍøÕ¾µÄÁ÷³ÌÖУ¬Õâ¸öÈÝÆ÷·ÅÔÚBrowserÊǷdz£ºÏÀíµÄ¡£ÔÚiOS¿Í»§¶Ë£¬ViewµÄÈÝÆ÷ÊÇÓÉUIViewControllerÖеÄview¸ºÔð£¬ÎÒÒ²¾õµÃÆ»¹û×öµÄÕâ¸öÑ¡ÔñÊǷdz£ÕýÈ·Ã÷Öǵġ£
ÒòΪä¯ÀÀÆ÷ºÍ·þÎñ¶ËÖ®¼äµÄ¹ØÏµ·Ç³£ËÉÉ¢£¬¶øÇÒËûÃÇ·ÖÊôÓÚÁ½¸ö²»Í¬ÕóÓª£¬·þÎñ¶Ë½«¶ÔViewµÄÃèÊöÉú³ÉÖ®ºó£¬½»¸øä¯ÀÀÆ÷È¥¸ºÔðչʾ£¬È»¶øÒ»µ©viewÉÏÓÐʲôʼþ²úÉú£¬»ù±¾ÉÏÊǺÜÉÙ´«µÝµ½·þÎñÆ÷£¨Ò²¾ÍÊÇËùνµÄController£©µÄ£¨Òª´«Ò²¿ÉÒÔ£ºAJAX£©£¬¶¼ÊÇÔÚä¯ÀÀÆ÷Õâ±ß°ÑÊÂÇé¶¼×öµô£¬ËùÒÔÔÚÕâÖÖÇé¿öÏ£¬ViewÈÝÆ÷¾ÍÊʺϷÅÔÚä¯ÀÀÆ÷£¨V£©Õâ±ß¡£
µ«ÊÇÔÚiOS¿ª·¢ÁìÓò£¬ËäȻҲÓÐÈÃViewÈ¥¼àÌýʼþµÄ×ö·¨£¬µ«ÕâÖÖ×ö·¨·Ç³£ÉÙ£¬¶¼ÊǰÑʼþ»Ø´«¸øController£¬È»ºóControllerÔÙÁíÐе÷¶È¡£ËùÒÔÕâʱºò£¬ViewµÄÈÝÆ÷·ÅÔÚController¾Í·Ç³£ºÏÊÊ¡£Controller¿ÉÒÔÒòΪ²»Í¬Ê¼þµÄ²úÉúÈ¥ºÜ·½±ãµØ¸ü¸ÄÈÝÆ÷ÄÚÈÝ£¬±ÈÈç¼ÓÔØÊ§°Üʱ£¬°ÑÈÝÆ÷ÄÚÈÝ»»³Éʧ°ÜÒ³ÃæµÄView£¬ÎÞÍøÂçʱ£¬°ÑÈÝÆ÷Ò³Ãæ»»³ÉÎÞÍøÂçµÄViewµÈµÈ¡£
ÔÚiOS¿ª·¢ÁìÓòÖУ¬ÔõÑù²ÅËãÊÇMVC»®·ÖµÄÕýÈ·×ËÊÆ£¿
Õâ¸öÎÊÌâÆäʵÔÚÉÏÃæÒѾ½â´ðµôÒ»²¿·ÖÁË£¬ÄÇôÕâ¸öÎÊÌâµÄ´ð°¸¾Íµ±ÊǶÔÉÏÃæÎÊÌâµÄÒ»¸ö×ܽá°É¡£
MÓ¦¸Ã×öµÄÊ£º
- ¸øViewControllerÌṩÊý¾Ý
- ¸øViewController´æ´¢Êý¾ÝÌṩ½Ó¿Ú
- Ìṩ¾¹ý³éÏóµÄÒµÎñ»ù±¾×é¼þ£¬¹©Controllerµ÷¶È
CÓ¦¸Ã×öµÄÊ£º
- ¹ÜÀíView ContainerµÄÉúÃüÖÜÆÚ
- ¸ºÔðÉú³ÉËùÓеÄViewʵÀý£¬²¢·ÅÈëView Container
- ¼àÌýÀ´×ÔViewÓëÒµÎñÓйصÄʼþ£¬Í¨¹ýÓëModelµÄºÏ×÷£¬À´Íê³É¶ÔӦʼþµÄÒµÎñ¡£
VÓ¦¸Ã×öµÄÊ£º
- ÏìÓ¦ÓëÒµÎñÎ޹صÄʼþ£¬²¢Òò´ËÒý·¢¶¯»Ð§¹û£¬µã»÷·´À¡£¨Èç¹ûºÏÊʵϰ£¬¾¡Á¿»¹ÊÇ·ÅÔÚViewÈ¥×ö£©µÈ¡£
- ½çÃæÔªËØ±í´ï
ÎÒͨ¹ýÓë·þÎñ¶ËMVC»®·ÖµÄ¶Ô±ÈÀ´»Ø´ðÁËÕâÁ½¸öÎÊÌ⣬֮ËùÒÔÕâô×ö£¬ÊÇÒòΪÎÒÖªµÀÓкܶàiOS¹¤³Ìʦ֮ǰÊÇ´Ó·þÎñ¶Ëת¹ýÀ´µÄ¡£ÎÒÒ²ÊÇÕâÑù£¬ÔÚ½ø°²¾Ó¿Í֮ǰ£¬ÎÒÒ²ÊÇ×ö·þÎñ¶Ë¿ª·¢µÄ£¬ÔÚѧϰiOSµÄ¹ý³ÌÖУ¬ÎÒÒ²Ôø¾¶ÔiOSÁìÓòµÄMVC»®·ÖÎÊÌâ²úÉú¹ýÒÉ»ó£¬ÎÒÒÉ»óµÄµã¾ÍÊÇÇ°Ãæ¿ªÆªÎҲ²âµÄµã¡£Èç¹ûÓÐÈËÎÊÎÒiOSÖÐÓ¦¸ÃÔõô×öMVCµÄ»®·Ö£¬ÎҾͻáÏñÉÏÃæÕâô»Ø´ð¡£
MVCS
Æ»¹û×ÔÉí¾Í²ÉÓõÄÊÇÕâÖּܹ¹Ë¼Â·£¬´ÓÃû×ÖÒ²ÄÜ¿´³ö£¬Ò²ÊÇ»ùÓÚMVCÑÜÉú³öÀ´µÄÒ»Ì׼ܹ¹¡£´Ó¸ÅÄîÉÏÀ´Ëµ£¬Ëü²ð·ÖµÄ²¿·ÖÊÇModel²¿·Ö£¬²ð³öÀ´Ò»¸öStore¡£Õâ¸öStoreרߺÔðÊý¾Ý´æÈ¡¡£µ«´Óʵ¼Ê²Ù×÷µÄ½Ç¶ÈÉϽ²£¬Ëü²ð¿ªµÄÊÇController¡£
ÕâËãÊÇÊÝModelµÄÒ»ÖÖ·½°¸£¬ÊÝModelÖ»ÊÇרÃÅÓÃÓÚ±í´ïÊý¾Ý£¬È»ºó´æ´¢¡¢Êý¾Ý´¦Àí¶¼½»¸øÍâÃæµÄÀ´×ö¡£MVCSʹÓõÄǰÌáÊÇ£¬Ëü¼ÙÉèÁËÄãÊÇÊÝModel£¬Í¬Ê±Êý¾ÝµÄ´æ´¢ºÍ´¦Àí¶¼ÔÚControllerÈ¥×ö¡£ËùÒÔ¶ÔÓ¦µ½MVCS£¬ËüÔÚÒ»¿ªÊ¼¾ÍÊDzð·ÖµÄController¡£ÒòΪController×öÁËÊý¾Ý´æ´¢µÄÊÂÇ飬¾Í»á±äµÃ·Ç³£ÅÓ´ó£¬ÄÇô¾Í°ÑControllerרߺÔð´æÈ¡Êý¾ÝµÄÄDz¿·Ö³éÀë³öÀ´£¬½»¸øÁíÒ»¸ö¶ÔÏóÈ¥×ö£¬Õâ¸ö¶ÔÏó¾ÍÊÇStore¡£Õâôµ÷ÕûÖ®ºó£¬Õû¸ö½á¹¹Ò²¾Í±ä³ÉÁËÕæÕýÒâÒåÉϵÄMVCS¡£
¹ØÓÚÅÖModelºÍÊÝModel
ÎÒÔÚÃæÊԺ͸ú±ðÈËÁÄÌìʱ£¬·¢ÏÖÖªµÀÅÖModelºÍÊÝModelµÄ¸ÅÄîµÄÈ˲»ÊǺܶࡣ´óÔ¼Á½ÈýÄêǰ¹úÍâÒµ½çÔø¾¶Ô´ËÓйý·Ç³£¼¤ÁÒµÄÌÖÂÛ£¬Ö÷Ìâ¾ÍÊÇFat model, skinny controller¡£ÏÖÔÚ¹ØÓÚÕâ·½ÃæµÄÌÖÂÛÒѾ²»¶àÁË£¬È»¶øÖ±µ½½ñÌìÅÖModelºÍÊÝModelÄĸö¸üºÃ£¬Òµ½çÒ²»¹Ã»Óж¨ÂÛ£¬ËùÒÔÕâËãÊÇĿǰҵ½çÐü¶øÎ´½âµÄÒ»¸öÕùÒé¡£ÎÒºÜÉÙ¿´µ½¹úÄÚÓÐÌÖÂÛÕâ¸öµÄ×ÊÁÏ£¬ËùÒÔÔÚÕâÀïÎÒ´òËã²¹³äÒ»ÏÂʲô½ÐÅÖModelʲô½ÐÊÝModel¡£ÒÔ¼°ËûÃǵÄÕùÂÛÀ´Ô´Óںδ¦¡£
ÅÖModel°üº¬Á˲¿·ÖÈõÒµÎñÂß¼¡£ÅÖModelÒª´ïµ½µÄÄ¿µÄÊÇ£¬Controller´ÓÅÖModelÕâÀïÄõ½Êý¾ÝÖ®ºó£¬²»ÓöîÍâ×ö²Ù×÷»òÕßÖ»Òª×ö·Ç³£ÉٵIJÙ×÷£¬¾ÍÄܹ»½«Êý¾ÝÖ±½ÓÓ¦ÓÃÔÚViewÉÏ¡£¾Ù¸öÀý×Ó£º
Raw Data:
timestamp:1234567
FatModel:
@property (nonatomic, assign) CGFloat timestamp;
- (NSString *)ymdDateString; // 2015-04-20 15:16
- (NSString *)gapString; // 3·ÖÖÓǰ¡¢1Сʱǰ¡¢Ò»Ììǰ¡¢2015-3-13 12:34
Controller:
self.dateLabel.text = [FatModel ymdDateString];
self.gapLabel.text = [FatModel gapString]; |
°Ñtimestampת»»³É¾ßÌåÒµÎñÉÏËùÐèÒªµÄ×Ö·û´®£¬ÕâÊôÓÚÒµÎñ´úÂ룬ËãÊÇÈõÒµÎñ¡£FatModel×öÁËÕâЩÈõÒµÎñÖ®ºó£¬Controller¾ÍÄܱäµÃ·Ç³£skinny£¬ControllerÖ»ÐèÒª¹Ø×¢Ç¿ÒµÎñ´úÂë¾ÍÐÐÁË¡£ÖÚËùÖÜÖª£¬Ç¿ÒµÎñ±ä¶¯µÄ¿ÉÄÜÐÔÒª±ÈÈõÒµÎñ´óµÃ¶à£¬ÈõÒµÎñÏà¶ÔÎȶ¨£¬ËùÒÔÈõÒµÎñÈû½øModelÀïÃæÊÇûÎÊÌâµÄ¡£ÁíÒ»·½Ã棬ÈõÒµÎñÖØ¸´³öÏֵįµÂÊÒª´óÓÚǿҵÎñ£¬¶Ô¸´ÓÃÐÔµÄÒªÇó¸ü¸ß£¬Èç¹ûÕⲿ·ÖÒµÎñдÔÚController£¬ÀàËÆµÄ´úÂë»áÈ÷µÃµ½´¦¶¼ÊÇ£¬Ò»µ©ÈõÒµÎñÓÐÐ޸ģ¨ÈõÒµÎñÐÞ¸ÄÆµÂʵͲ»´ú±í¾ÍûÓÐÐ޸ģ©£¬Õâ¸öÊÂÇé¾ÍÊÇÒ»¸öÔÖÄÑ¡£Èç¹ûÈûµ½ModelÀïÃæÈ¥£¬¸ÄÒ»´¦ºÜ¶àµØ·½¾ÍÄܸú×Ÿģ¬¾ÍÄܱÜÃâÕⳡÔÖÄÑ¡£
È»¶øÆäȱµã¾ÍÔÚÓÚ£¬ÅÖModelÏà¶Ô±È½ÏÄÑÒÆÖ²£¬ËäȻֻÊǰüº¬ÈõÒµÎñ£¬µ«ºÃ´õÒ²ÊÇÒµÎñ£¬Ç¨ÒƵÄʱºòºÜÈÝÒװγöÂܲ·´ø³öÄà¡£ÁíÍâÒ»µã£¬MVCµÄ¼Ü¹¹Ë¼Ïë¸ü¼ÓÇãÏòÓÚModelÊÇÒ»¸öLayer£¬¶ø²»ÊÇÒ»¸öObject£¬²»Ó¦¸Ã°ÑÒ»¸öLayerÓ¦¸Ã×öµÄÊÂÇé½»¸øÒ»¸öObjectÈ¥×ö¡£×îºóÒ»µã£¬Èí¼þÊÇ»á³É³¤µÄ£¬FatModelºÜÓпÉÄÜËæ×ÅÈí¼þµÄ³É³¤Ô½À´Ô½Fat£¬×îÖÕÄÑÒÔά»¤¡£
ÊÝModelÖ»¸ºÔðÒµÎñÊý¾ÝµÄ±í´ï£¬ËùÓÐÒµÎñÎÞÂÛÇ¿ÈõÒ»ÂÉÈÓµ½Controller¡£ÊÝModelÒª´ïµ½µÄÄ¿µÄÊÇ£¬¾¡Ò»ÇпÉÄÜÈ¥±àдϸÁ£¶ÈModel£¬È»ºóÅäÌ׸÷ÖÖhelperÀà»ò·½·¨À´¶ÔÈõÒµÎñ×ö³éÏó£¬Ç¿ÒµÎñÒÀ¾É½»¸øController¡£¾Ù¸öÀý×Ó£º
Raw Data:
{
"name":"casa",
"sex":"male",
}
SlimModel:
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *sex;
Helper:
#define Male 1;
#define Female 0;
+ (BOOL)sexWithString:(NSString *)sex;
Controller:
if ([Helper sexWithString:SlimModel.sex] == Male) {
...
} |
ÓÉÓÚSlimModel¸úÒµÎñÍêÈ«Î޹أ¬ËüµÄÊý¾Ý¿ÉÒÔ½»¸øÈκÎÒ»¸öÄÜ´¦ÀíËüÊý¾ÝµÄHelper»òÆäËûµÄ¶ÔÏó£¬À´Íê³ÉÒµÎñ¡£ÔÚ´úÂëÇ¨ÒÆµÄʱºò¶ÀÁ¢ÐÔºÜÇ¿£¬ºÜÉÙ»á³öÏְγöÂܲ·´ø³öÄàµÄÇé¿ö¡£ÁíÍ⣬ÓÉÓÚSlimModelÖ»ÊÇÊý¾Ý±í´ï£¬¶ÔËü½øÐÐά»¤»ù±¾ÉÏÊÇ0³É±¾£¬Èí¼þÅòÕ͵ÃÔÙÀ÷º¦£¬SlimModelÒ²²»»á´óµ½ÄĶùÈ¥¡£
ȱµã¾ÍÔÚÓÚ£¬HelperÕâÖÖ×ö·¨Ò²²»¼ûµÃºÜºÃ£¬ÕâÀïÓÐһƪÎÄÕÂÅúÅÐÁËÕâ¸öÊÂÇé¡£ÁíÍ⣬ÓÉÓÚModelµÄ²Ù×÷»á³öÏÖÔÚ¸÷Öֵط½£¬SlimModelÔÚÒ»¶¨³Ì¶ÈÉÏÎ¥±³ÁËDRY£¨Don't Repeat Yourself£©µÄ˼·£¬ControllerÈÔÈ»²»¿É±ÜÃâÔÚÒ»¶¨³Ì¶ÈÉϳöÏÖ´úÂëÅòÕÍ¡£
ÎÒµÄ̬¶È£¿àÅ£¬ÎÒ»áÔÚ±¾ÃÅÐÄ·¨ÕâÒ»½ÚÀïÃæËµ¡£
˵»ØÀ´£¬MVCSÊÇ»ùÓÚÊÝModelµÄÒ»Öּܹ¹Ë¼Â·£¬°ÑÔ±¾ModelÒª×öµÄºÜ¶àÊÂÇéÖÐµÄÆäÖÐÒ»²¿·Ö¹ØÓÚÊý¾Ý´æ´¢µÄ´úÂë³éÏó³ÉÁËStore£¬ÔÚÒ»¶¨³Ì¶ÈÉϽµµÍÁËControllerµÄѹÁ¦¡£
MVVM
MVVMÈ¥ÄêÔÚÒµ½çÌÖÂ۵÷dz£¶à£¬ÎÞÂÛ¹úÄÚ»¹ÊǹúÍâ¶¼ÌÖÂ۵÷dz£ÈÈÁÒ£¬ÓÈÆäÊÇÔÚReactiveCocoaÕâ¸ö¿â³ÉÊìÖ®ºó£¬ViewModelºÍViewµÄÐźŻúÖÆÔÚiOSÏÂÖÕÓÚÓÐÁËÒ»¸öÏà¶ÔÓÅÑŵÄʵÏÖ¡£MVVM±¾ÖÊÉÏÒ²ÊÇ´ÓMVCÖÐÅÉÉú³öÀ´µÄ˼Ï룬MVVM×ÅÖØÏëÒª½â¾öµÄÎÊÌâÊǾ¡¿ÉÄܵؼõÉÙControllerµÄÈÎÎñ¡£²»¹ÜMVVMÒ²ºÃ£¬MVCSÒ²ºÃ£¬ËûÃǵĹ²Ê¶¶¼ÊÇController»áËæ×ÅÈí¼þµÄ³É³¤£¬±äºÜ´óºÜÄÑά»¤ºÜÄѲâÊÔ¡£Ö»²»¹ýÁ½Öּܹ¹Ë¼Â·µÄǰÌ᲻ͬ£¬MVCSÊÇÈÏΪController×öÁËÒ»²¿·ÖModelµÄÊÂÇ飬Ҫ°ÑËü²ð³öÀ´±ä³ÉStore£¬MVVMÊÇÈÏΪController×öÁËÌ«¶àÊý¾Ý¼Ó¹¤µÄÊÂÇ飬ËùÒÔMVVM°ÑÊý¾Ý¼Ó¹¤µÄÈÎÎñ´ÓControllerÖнâ·ÅÁ˳öÀ´£¬Ê¹µÃControllerÖ»ÐèҪרעÓÚÊý¾Ýµ÷ÅäµÄ¹¤×÷£¬ViewModelÔòÈ¥¸ºÔðÊý¾Ý¼Ó¹¤²¢Í¨¹ý֪ͨ»úÖÆÈÃViewÏìÓ¦ViewModelµÄ¸Ä±ä¡£
MVVMÊÇ»ùÓÚÅÖModelµÄ¼Ü¹¹Ë¼Â·½¨Á¢µÄ£¬È»ºóÔÚÅÖModelÖвð³öÁ½²¿·Ö£ºModelºÍViewModel¡£¹ØÓÚÕâ¸ö¹ÛµãÎÒÒª×öÒ»¸ö¶îÍâ½âÊÍ£ºÅÖModel×öµÄÊÂÇéÊÇÏÈΪController¼õ¸º£¬È»ºóÓÉÓÚModel±äÅÖ£¬ÔÙÔÚ´Ë»ù´¡Éϲð³öViewModel£¬¸úÒµ½çÆÕ±éÈÏÖªµÄMVVM±¾ÖÊÉÏÊÇΪController¼õ¸ºÕâ¸ö˵·¨²¢²»Ã¬¶Ü£¬ÒòΪÅÖModel×öµÄÊÂÇéÒ²ÊÇΪController¼õ¸º¡£
ÁíÍ⣬ÎÒÇ°ÃæËµMVVM°ÑÊý¾Ý¼Ó¹¤µÄÈÎÎñ´ÓControllerÖнâ·Å³öÀ´£¬¸úMVVM²ð·ÖµÄÊÇÅÖModelÒ²²»Ã¬¶Ü¡£Òª×öµ½½â·ÅController£¬Ê×ÏÈÄãµÃÓиöÅÖModel£¬È»ºóÔÙ°ÑÕâ¸öÅÖModel²ð³ÉModelºÍViewModel¡£
ÄÇôMVVM¾¿¾¹Ó¦¸ÃÈçºÎʵÏÖ£¿
ÕâºÜÓпÉÄÜÊÇ´ó¶àÊýÈ˾À½áµÄÎÊÌ⣬ÎÒ´òËãÆ¾ÎҵĸöÈ˾ÑéÊÔͼÔÚÕâÀï»Ø´ðÕâ¸öÎÊÌ⣬»¶Ó´ó¼ÒÔÚÆÀÂÛÇø½»Á÷¡£
ÔÚiOSÁìÓò´ó²¿·ÖMVVM¼Ü¹¹¶¼»áʹÓÃReactiveCocoa£¬µ«ÊÇʹÓÃReactiveCocoaµÄiOSÓ¦ÓþÍÊÇ»ùÓÚMVVM¼Ü¹¹µÄÂð£¿Äǵ±È»²»ÊÇ£¬ÎÒ¾õµÃºÜ¶àÈ˶¼´æÔÚÕâ¸öÎóÇø£¬ÎÒÃæÊÔ¹ýµÄһЩÈËÌáµ½ÁËReactiveCocoaÒ²Ìáµ½ÁËMVVM£¬µ«ËûÃǶԴ˵ÄÀí½â·ôdzµÃÈÃÎÒÈÌ¿¡²»½û¡£àÅ£¬ÔÚÍøÂç²ã¼Ü¹¹ÎÒ»á¾Ù³ö²»Ê¹ÓÃReactiveCocoaµÄÀý×Ó£¬ÏÖÔÚ¾ÙÎҸоõÓеã¶ùÔç¡£
MVVMµÄ¹Ø¼üÊÇÒªÓÐView Model£¡¶ø²»ÊÇReactiveCocoa(¿±Îó2)
ViewModel×öʲôÊÂÇ飿¾ÍÊǰÑRawData±ä³ÉÖ±½ÓÄܱ»ViewʹÓõĶÔÏóµÄÒ»ÖÖModel¡£¾Ù¸öÀý×Ó£º
Raw Data:
{
(
(123, 456),
(234, 567),
(345, 678)
)
} |
ÕâÀïµÄRawDataÎÒÃǼÙÉèÊǾγ¶È£¬Êý×ÖÎÒËæ±ãдµÄ²»ÒªÌ«ÔÚÒ⡣ȻºóÄãÓÐÒ»¸öÄ£¿éÊǵØÍ¼Ä£¿é£¬°Ñ¾Î³¶ÈÊý×éÈ«²¿¶¼×ª±ä³ÉMKAnnotation»òÆäÅÉÉúÀà¶ÔÓÚControllerÀ´ËµÊÇÈõÒµÎñ£¬£¨¼Çס£¬ÅÖModel¾ÍÊÇÓÃÀ´×öÈõÒµÎñµÄ£©£¬Òò´ËÎÒÃÇÓÃViewModelÖ±½Ó°ÑËüת±ä³ÉMKAnnotationµÄNSArray£¬½»¸øControllerÖ®ºóControllerÖ±½Ó¾Í¿ÉÒÔÓÃÁË¡£
àÅ£¬Õâ¾ÍÊÇViewModelÒª×öµÄÊÂÇ飬ÊDz»ÊǾõµÃºÜ¼òµ¥£¬¿´²»³öÓÅÔ½ÐÔ£¿
°²¾Ó¿ÍPadÓ¦ÓÃÒ²ÓÐÒ»¸öµØÍ¼Ä£¿é£¬ÔÚÕâÀïÎÒÉè¼ÆÁËÒ»¸ö¶ÔÏó½Ð×öreformer£¨Æäʵ¾ÍÊÇViewModel£©£¬×¨ÃÅÓÃÀ´¸ÉÕâ¸öÊÂÇé¡£ÄÇôÕâô×öµÄÓÅÔ½ÐÔÌåÏÖÔÚÄĶùÄØ£¿
°²¾Ó¿Í·ÖÈý´óÒµÎñ£º×â·¿¡¢¶þÊÖ·¿¡¢Ð·¿¡£ÕâÈý¸öÒµÎñ¶ÔÓ¦ÒÆ¶¯¿ª·¢ÍŶÓÓÐÈý¸öAPI¿ª·¢ÍŶӣ¬ËûÃǸ÷×ÔΪÕþ£¬Õâ¾ÍÔì³ÉÁËÒ»¸ö½á¹û£ºÈý¸öAPIÍŶӻØÀ¡¸øÒƶ¯¿Í»§¶ËµÄÊý¾ÝÄÚÈÝËäȻһÖ£¬µ«ÊÇÊý¾Ý¸ñʽÊDz»Ò»Öµģ¬Ò²¾ÍÊÇÏàͬvalue¶ÔÓ¦µÄkeyÊDz»Ò»Öµġ£µ«Õ¹Ê¾µØÍ¼µÄViewController²»¿ÉÄÜдÈý¸ö£¬ËùÒԿ϶¨ÉÙ²»ÁËÒªÓÐÒ»¸öAPIÊý¾Ý¼æÈݵÄÂß¼£¬Õâ¸öÂß¼ÎҾͷÅÔÚreformerÀïÃæÈ¥×öÁË£¬ÓÚÊÇÒµÎñÁ÷³Ì¾Í±ä³ÉÁËÕâÑù£º

ÕâôһÀ´£¬Ô±¾¸´ÔÓµÄMKAnnotation×é×°Âß¼¾Í´ÓControllerÀïÃæ²ð·ÖÁ˳öÀ´£¬Controller¿ÉÒÔÖ±½ÓÄÃ×ÅReformer·µ»ØµÄÊý¾Ý½øÐÐչʾ¡£APIManager¾ÍÊôÓÚModel£¬reformer¾ÍÊôÓÚViewModel¡£¾ßÌ幨ÓÚreformerµÄ¶«Î÷ÎÒ»á·ÅÔÚÍøÂç²ã¼Ü¹¹À´Ïêϸ½âÊÍ¡£Reformer´Ëʱ°çÑݵÄViewModel½ÇÉ«Äܹ»ºÜºÃµØ¸øController¼õ¸º£¬Í¬Ê±£¬Î¬»¤³É±¾Ò²´ó´ó½µµÍ£¬¾¹ýreformer²ú³öµÄÓÀÔ¶¶¼ÊÇMKAnnotation£¬Controller¿ÉÒÔÖ±½ÓÄÃÀ´Ê¹Óá£
È»ºóÁíÍâÒ»µã£¬»¹ÓÐÒ»¸öÒµÎñÐèÇóÊÇÈ¡¸½½üµÄ·¿Ô´£¬µØÍ¼APIÇëÇóÊÇÄܹ»holdסÕâ¸öÐèÇóµÄ£¬ÄÇôÆäËûµØ·½¶¼²»Óñ䣬ÔÚfetchDataWithReformerµÄʱºò»»Ò»¸öreformer¾Í¿ÉÒÔÁË£¬ÆäËûµÄÊÂÇé¶¼½»¸øreformer¡£
ÄÇôReactiveCocoaÓ¦¸Ã°çÑÝʲô½ÇÉ«£¿
²»ÓÃReactiveCocoaÒ²ÄÜMVVM£¬ÓÃReactiveCocoaÄܸüºÃµØÌåÏÖMVVMµÄ¾«Ëè¡£Ç°ÃæÎÒ¾Ùµ½µÄÀý×ÓÖ»ÊÇÊý¾Ý´ÓAPIµ½ViewµÄ·½Ïò£¬ViewµÄ²Ù×÷Ò²»á²úÉú"Êý¾Ý"£¬Ö»²»¹ýÕâÀïµÄ"Êý¾Ý"¸ü¶àµÄÊÇÌåÏÖÔÚ±í´ïÓû§µÄ²Ù×÷ÉÏ£¬±ÈÈçÊäÈëÁËʲôÄÚÈÝ£¬ÄÇôÊý¾Ý¾ÍÊÇtext¡¢Ñ¡ÔñÁËÄĸöcell£¬ÄÇôÊý¾Ý¾ÍÊÇindexPath¡£ÄÇôÔÚÊý¾Ý´Óview×ßÏòAPI»òÕßControllerµÄ·½ÏòÉÏ£¬¾ÍÊÇReactiveCocoa·¢»ÓµÄµØ·½¡£
ÎÒÃÇÖªµÀ£¬ViewModel±¾ÖÊÉÏËãÊÇModel²ã£¨ÒòΪÊÇÅÖModelÀïÃæ·Ö³öÀ´µÄÒ»²¿·Ö£©£¬ËùÒÔView²¢²»ÊʺÏÖ±½Ó³ÖÓÐViewModel£¬ÄÇôViewÒ»µ©²úÉúÊý¾ÝÁËÔõô°ì£¿ÈÓÐźÅÈÓ¸øViewModel£¬ÓÃËÈÓ£¿ReactiveCocoa¡£
ÔÚMVVMÖÐʹÓÃReactiveCocoaµÄµÚÒ»¸öÄ¿µÄ¾ÍÊÇÈçÉÏËù˵£¬View²¢²»ÊʺÏÖ±½Ó³ÖÓÐViewModel¡£µÚ¶þ¸öÄ¿µÄ¾ÍÔÚÓÚ£¬ViewModelÓпÉÄܲ¢²»ÊÇÖ»·þÎñÓÚÌØ¶¨µÄÒ»¸öView£¬Ê¹Óøü¼ÓËÉÉ¢µÄ°ó¶¨¹ØÏµÄܹ»½µµÍViewModelºÍViewÖ®¼äµÄñîºÏ¶È¡£
ÄÇôÔÚMVVMÖУ¬Controller°çÑÝʲô½ÇÉ«£¿
´ó²¿·Ö¹úÄÚÍâ×ÊÁϲûÊöMVVMµÄʱºò¶¼ÊÇÕâÑùÅŲ¼µÄ£ºView <-> ViewModel <-> Model£¬Ôì³ÉÁËMVVM²»ÐèÒªControllerµÄ´í¾õ£¬ÏÖÔÚËÆºõ·¢Õ¹³ÉÒµ½ç¿ªÊ¼³öÏÖMVVMÊDz»ÐèÒªControllerµÄ¡£µÄÉùÒôÁË¡£ÆäʵMVVMÊÇÒ»¶¨ÐèÒªControllerµÄ²ÎÓëµÄ£¬ËäÈ»MVVMÔÚÒ»¶¨³Ì¶ÈÉÏÈõ»¯ÁËControllerµÄ´æÔڸУ¬²¢ÇÒ¸øController×öÁ˼õ¸ºÊÝÉí£¨ÕâÒ²ÊÇMVVMµÄÖ÷ҪĿµÄ£©¡£µ«ÊÇ£¬Õâ²¢²»´ú±íMVVMÖв»ÐèÒªController£¬MMVCºÍMVVMËûÃÇÖ®¼äµÄ¹ØÏµÓ¦¸ÃÊÇÕâÑù£º

View <-> C <-> ViewModel <-> Model£¬ËùÒÔʹÓÃMVVMÖ®ºó£¬¾Í²»ÐèÒªControllerµÄ˵·¨ÊDz»ÕýÈ·µÄ¡£ÑϸñÀ´ËµMVVMÆäʵÊÇMVCVM¡£´ÓͼÖпÉÒÔµÃÖª£¬Controller¼ÐÔÚViewºÍViewModelÖ®¼ä×öµÄÆäÖÐÒ»¸öÖ÷ÒªÊÂÇé¾ÍÊǽ«ViewºÍViewModel½øÐа󶨡£ÔÚÂß¼ÉÏ£¬ControllerÖªµÀÓ¦µ±Õ¹Ê¾ÄĸöView£¬ControllerÒ²ÖªµÀÓ¦µ±Ê¹ÓÃÄĸöViewModel£¬È»¶øViewºÍViewModelËüÃÇÖ®¼äÊÇ»¥Ï಻֪µÀµÄ£¬ËùÒÔController¾Í¸ºÔð¿ØÖÆËûÃǵİ󶨹ØÏµ£¬ËùÒÔ½ÐController/¿ØÖÆÆ÷¾ÍÊÇÕâ¸öÔÒò¡£
Ç°Ãæ³¶ÁËÄÇô¶à£¬Æäʵ¹é¸ù½áµ×¾ÍÊÇÒ»¾ä»°£ºÔÚMVCµÄ»ù´¡ÉÏ£¬°ÑC²ð³öÒ»¸öViewModelרߺÔðÊý¾Ý´¦ÀíµÄÊÂÇ飬¾ÍÊÇMVVM¡£È»ºó£¬ÎªÁËÈÃViewºÍViewModelÖ®¼äÄܹ»ÓбȽÏËÉÉ¢µÄ°ó¶¨¹ØÏµ£¬ÓÚÊÇÎÒÃÇʹÓÃReactiveCocoa£¬ÒòΪƻ¹û±¾Éí²¢Ã»ÓÐÌṩһ¸ö±È½ÏÊʺÏÕâÖÖÇé¿öµÄ°ó¶¨·½·¨¡£iOSÁìÓòÀïKVO£¬Notification£¬block£¬delegateºÍtarget-action¶¼¿ÉÒÔÓÃÀ´×öÊý¾ÝͨÐÅ£¬´Ó¶øÀ´ÊµÏְ󶨣¬µ«¶¼²»ÈçReactiveCocoaÌṩµÄRACSignalÀ´µÄÓÅÑÅ£¬Èç¹û²»ÓÃReactiveCocoa£¬°ó¶¨¹ØÏµ¿ÉÄܾÍ×ö²»µ½ÄÇôËÉÉ¢ÄÇôºÃ£¬µ«²¢²»Ó°ÏìËü»¹ÊÇMVVM¡£
ÔÚʵ¼ÊiOSÓ¦Óüܹ¹ÖУ¬MVVMÓ¦¸Ã³öÏÖÔÚÁ˴󲿷ִ´Òµ¹«Ë¾»òÕßÀÏÅÆ¹«Ë¾ÐÂAppµÄiOSÓ¦Óüܹ¹Í¼ÖУ¬¾ÝÎÒËùÖªÒ×±¦Ö§¸¶ÆìϵÄij¸öiOSÓ¦ÓþÍÕûÌå²ÉÓÃÁËMVVM¼Ü¹¹£¬ËûÃdzé³öÁËÒ»¸öAction²ãÀ´×°¸÷ÖÖViewModel£¬Ò²ÊÇÊôÓÚÏà¶ÔºÏÀíµÄ½á¹¹¡£
ËùÒÔControllerÔÚMVVMÖУ¬Ò»·½Ã渺ÔðViewºÍViewModelÖ®¼äµÄ°ó¶¨£¬ÁíÒ»·½ÃæÒ²¸ºÔð³£¹æµÄUIÂß¼´¦Àí¡£
VIPER
VIPER £¨View£¬Interactor£¬Presenter£¬Entity£¬Routing£©¡£VIPERÎÒ²¢Ã»ÓÐʵ¼ÊʹÓùý£¬ÎÒÊÇÔÚ objc.ioÉϵÚ13ÆÚ¿´µ½µÄ¡£
µ«·²³öÏÖÒ»¸öмܹ¹»òÕßÎÒ֮ǰ²¢²»ÊìϤµÄмܹ¹£¬ÓÐÒ»µãÎÒÄܹ»·Ç³£¿Ï¶¨£¬Õâ»õÒ»¶¨ÓÖÊǰÑMVCµÄÄĸö²¿·Ö¸ø²ð¿ªÁË£¨»µÐ¦£¬×öÕâÖÖÅжϵÄÀíÂÛÒÀ¾ÝÔÚµÚһƪÎÄÕÂÀïÃæÎÒÒѾ½²¹ýÁË£©¡£ÊÂʵÇé¿öÊÇVIPERȷʵ²ðÁ˺ܶàºÜ¶à£¬³ýÁËViewû²ð£¬ÆäËüµÄ¶¼²ðÁË¡£
ÎÒÌáµ½µÄÕâÁ½ÆªÎÄÕ¹ØÓÚVIPER¶¼½²µÃºÜÏêϸ£¬Ò»¿´¾Í¶®¡£µ«¾ßÌåÔÚʹÓÃVIPERµÄʱºò»áÓÐʲô¿Ó»òÕß»áÓÐÄÄЩÕùÒéÎÒ²»ÊǺÜÇå³þ£¬Ó²ÒªÐ´ÕâÒ»½ÚµÄ»°ÎÒÖ»ÄÜ¿¿YY£¬ËùÒÔÎÒÏëÏ뻹ÊÇËãÁË¡£Èç¹û¸÷λ¶ÁÕßÓÐËÔÚʵ¼ÊAppÖвÉÓÃVIPER¼Ü¹¹µÄ»òÕß¶ÔVIPERºÜÓÐÐËȤµÄ£¬¿ÉÒÔÆÀÂÛÇøÀïÃæÌá³öÀ´£¬ÎÒÃǽ»Á÷һϡ£
±¾ÃÅÐÄ·¨
ÖØ½£Î޷棬´óÇɲ»¹¤¡£ ---- ¡¶ÉñµñÏÀ¡·
ÕâÊÇÑî¹ýÔÚÌô½£Ê±£¬ÐþÌúÖØ½£ÅÔ±ßдµÄÒ»¶Î»°¡£¶Ô´ËÎÒÉî±íÈÏͬ¡£Ìáµ½Õâ¶Î»°µÄÄ¿µÄÊÇÏë¸æËß´ó¼Ò£¬ÔÚ¾ßÌå×öView²ã¼Ü¹¹µÄÉè¼ÆÊ±£¬²»ÐèÒª¾ÐÄàÓÚMVC¡¢MVVM¡¢VIPERµÈ¹æ¾Ø¡£ÕâЩ¶¼ÊÇÕÐʽ£¬¸æËßÄãÄã¾ÍÖªµÀÁË£¬È»ºóÔõÃ´Íæ¶¼¿ÉÒÔ¡£µ«ÊÇÐÄ·¨²»ÊÇÕâÑùµÄ£¬ÐÄ·¨ÊÇ´óÇÉ£¬Ëµ³öÀ´ºÜ¼òµ¥£¬µ«ÊÇÄܲ»ÄÜÔÚʵ¼Ê¼Ü¹¹Éè¼ÆÊ±ÀμÇÐÄ·¨£¬²¢ÇÒ°´ÕÕ¹æ¾Ø°ìÊ£¬¾Í¶¼¿´¸öÈËÁË¡£
²ð·ÖµÄÐÄ·¨
ÌìϹ¦·ò³öÉÙÁÖ£¬Ììϼܹ¹³öMVC¡£ ---- Casa Taloyum
MVCÆäʵÊǷdz£¸ßLevelµÄ³éÏó£¬Òâ˼Ҳ¾ÍÊÇ£¬ÔÚMVCÌåϵÏ»¹¿ÉÒÔÔÙÑÜÉúÎÞÊýµÄ¼Ü¹¹·½Ê½£¬µ«Íò±ä²»ÀëÆä×ÚµÄÊÇ£¬ËüÒ»¶¨·ûºÏMVCµÄ¹æ·¶¡£Õâ¾ä»°²»ÊÇÎÒ˵µÄ£¬ÊÇÎÒÔÚij¸öÓ¢ÎÄ×ÊÁÏÉÏ¿´µ½µÄ£¬µ«Ê±¹ý¾³Ç¨£¬ÎÒÒѾÕÒ²»µ½³ö´¦ÁË£¬ÎÒºÜÔÞͬÕâ¾ä»°¡£ÎÒ²ÉÓõļܹ¹ÑϸñÀ´ËµÒ²ÊÇMVC£¬µ«Ò²×öÁ˺ܶàµÄ²ð·Ö¡£¸ù¾ÝÇ°Ãæ¼¸½ÚµÄÏ´Àñ£¬ÏàП÷λҲÃ÷°×ÁËÕâÑùµÄµÀÀí£º²ð·Ö·½Ê½µÄ²»Í¬µ®ÉúÁ˸÷ÖÖ²»Í¬µÄÑÜÉú¼Ü¹¹·½°¸£¨MVCS²ðÅÖController£¬MVVM²ðÅÖModel£¬VIPERʲô¶¼²ð£©£¬µ«¼´±ã²ð·Ö·½Ê½ÔÙÔõô¶àÑù£¬ÄǶ¼Ö»ÊÇÕÐʽ¡£¶ø²ð·ÖµÄ¹æ·¶£¬¾ÍÊÇÐÄ·¨¡£ÕâÒ»½ÚÎҾͽ²½²ÎÒÔÚ×öView¼Ü¹¹Ê±£¬×ö²ð·ÖµÄÐÄ·¨¡£
- µÚÒ»ÐÄ·¨£º±£Áô×îÖØÒªµÄÈÎÎñ£¬²ð·ÖÆäËü²»ÖØÒªµÄÈÎÎñ
ÔÚiOS¿ª·¢ÁìÓòÄÚ£¬UIViewController³ÐÔØÁ˷dz£¶àµÄÊÂÇ飬±ÈÈçViewµÄ³õʼ»¯£¬ÒµÎñÂß¼£¬Ê¼þÏìÓ¦£¬Êý¾Ý¼Ó¹¤µÈµÈ£¬µ±È»»¹Óиü¶àÎÒÏÖÔÚÒ²Áоٲ»³öÀ´£¬µ«ÊÇÎÒÃÇÖªµÀÓÐÒ»¼þÊÂÇéController¿Ï¶¨ÌÓ²»µôÒª×ö£ºÐµ÷VºÍM¡£Ò²¾ÍÊÇ˵£¬²»¹ÜÔõô²ð£¬Ðµ÷¹¤×÷ÊDz𲻵ôµÄ¡£
ÄÇôʣϵÄÊÂÇéÎÒÃǾͿÉÒÔ²ðÁË£¬±ÈÈçUITableViewµÄDataSource¡£ÌÆÇɵIJ©¿ÍÓÐһƪÎÄÕÂÌáµ½ËûºÍÁíÒ»¸ö¹¤³Ìʦ¹ØÓÚÊÇ·ñÒª²ð·ÖDataSourceÕùÂÛÁ˺þᣲð·ÖDataSourceÕâ¸ö×ö·¨Ó¦¸ÃÒ²ËãÊÇͨÓÃ×ö·¨£¬ÔÚ²»¸´ÔÓµÄÓ¦ÓÃÀïÃæ£¬Ëü¿ÉÄÜȷʵ¿´ÉÏÈ¥Ö»ÊÇÒ»¸öÊý×é¶øÒÑ£¬µ«ÔÚ¸´ÔÓµÄÇé¿öÏ£¬Ëü±³ºó¿ÉÄÜÉæ¼°ÁËÎļþÄÚÈݶÁÈ¡£¬Êý¾Ýͬ²½µÈµÈ¸´ÔÓÂß¼£¬ÕâÆªÎÄÕµĵÚÒ»½Ú¾ÍÌᳫÁËÕâ¸ö×ö·¨£¬ÎÒÆäʵҲÂùÌᳫµÄ¡£
Ç°ÃæµÄÎÄÕÂÀïÃæÒ²ÌáÁ˺ܶàÄܲðµÄ¶«Î÷£¬ÎҾͲ»°áÔËÁË£¬´ó¼Ò¿ÉÒÔ½øÈ¥¿´¿´¡£³ýÁËÕâÆªÎÄÕÂÌáµ½µÄÄÚÈÝÒÔÍ⣬ÈκαȽϴóµÄ£¬·ÅÔÚViewControllerÀïÃæ±È½ÏÔàµÄ£¬Ö»Òª²»ÊÇControllerµÄºËÐÄÂß¼£¬¶¼¿ÉÒÔ¿¼ÂDzð³öÈ¥£¬È»ºóÔڼܹ¹µÄʱºò×÷Ϊһ¸ö¶ÀÁ¢Ä£¿éÈ¥¶¨Ò壬ÒÔ¼°Éè¼ÆÊµÏÖ¡£
- µÚ¶þÐÄ·¨£º²ð·ÖºóµÄÄ£¿éÒª¾¡¿ÉÄÜÌá¸ß¿É¸´ÓÃÐÔ£¬¾¡Á¿×öµ½DRY
¸ù¾ÝµÚÒ»ÐÄ·¨²ð¿ªÀ´µÄ¶«Î÷£¬ºÜÓпÉÄÜ»¹ÊÇǿҵÎñÏà¹ØµÄ£¬ÕâÖÖÇé¿öÓеÄʱºòÎÞ·¨±ÜÃâ¡£µ«ÎÒÃDzðÒ²Òª²ðµÃºÃ¿´£¬²ð³öÀ´µÄ²¿·Ö×îºÃÄܹ»¹é³ÉijһÀà¶ÔÏó£¬È»ºó×îºÃÄܹ»³éÏó³öÒ»¸öͨÓÃÂß¼³öÀ´£¬Ê¹ËûÄܹ»¸´Ó᣼´Ê¹²»Äܳé³öͨÓÃÂß¼£¬ÄÇÒ²¾¡Á¿³éÏó³öÒ»¸öprotocol£¬À´ÊµÏÖIOP¡£ÕâÀïÓÐÆª¹ØÓÚIOPµÄÎÄÕ£¬´ó¼Ò¿´Á˾ÍÃ÷°×ÓÅÔ½ÐÔÁË¡£
- µÚÈýÐÄ·¨£ºÒª¾¡¿ÉÄÜÌá¸ß²ð·ÖÄ£¿éºóµÄ³éÏó¶È
Ò²¾ÍÊÇ˵£¬²ð·ÖµÄÁ£¶ÈÒª¾¡¿ÉÄÜ´óÒ»µã£¬·â×°µÃҪ͸Ã÷һЩ¡£ÌÆÇÉ˵һÇÐÒþ²Ø¶¼ÊǶԴúÂ븴ÔÓÐÔµÄÔö¼Ó£¬³ý·ÇËü´øÀ´Á˺ô¦£¬ÕâÔÚÒ»¶¨³Ì¶ÈÉÏÓеãµÀÀí£¬Ã»Óкô¦µÄÒþ²ØÈ·Êµ¶¼²»ºÃ£¨Ð¦£©¡£Ìá¸ß³éÏó¶ÈÊÂʵÉϾÍÊÇÔö¼Ó·â×°µÄÁ¦¶È£¬½«Ò»¸ö¸ºÔðµÄÒµÎñ³éÏó³ÉÖ»ÐèÒªºÜÉÙµÄÊäÈë¾ÍÄÜÍê³É£¬¾ÍÊǸ߶ȳéÏó¡£àÅ£¬¼Ì³ÐºÜ¶à²ã£¬ÕâÖÖ×ö·¨ËäȻҲÌá¸ßÁ˳éÏó³Ì¶È£¬µ«ÎÒ²»½¨ÒéÕâÃ´Íæ¡£ÎÒ²»È·¶¨ÌÆÇÉÔÚÕâÀï˵µÄÒþ²Ø¸úÎÒ˵µÄ·â×°ÊDz»ÊÇͬһ¸ö¸ÅÄµ«ÎÒÔÚÕâÀïÏëÌᳫµÄÊǾ¡¿ÉÄÜÌá¸ß³éÏó³Ì¶È¡£
Ìá¸ß³éÏó³Ì¶ÈµÄºÃ´¦ÔÚÓÚ£¬¶ÔÓÚÒµÎñ·½À´Ëµ£¬ËûÖ»ÐèÒªÊÕ¼¯ºÜÉÙµÄÐÅÏ¢£¨×îС³äÒªÌõ¼þ£©£¬×öºÜÉٵĵ÷¶È£¨Controller¸ºÔð´óÄ£¿éµ÷¶È£¬´óÄ£¿éÀïÃæÔÙÈ¥×öСģ¿éµÄµ÷¶È£©£¬¾ÍÄܹ»Íê³ÉÈÎÎñ£¬Õâ²ÅÊǸøController¼õ¸ºµÄÕýÈ·×ËÊÆ¡£
Èç¹û²ð·Ö³öÀ´µÄÄ£¿é³éÏó³Ì¶È²»¹»£¬Ä£¿é¶ÔÍâ½çÒªÇóµÄ²ÎÊý±È½Ï¶à£¬ÄÇôÔÚControllerÀïÃæ£¬¹ØÓÚÊÕ¼¯²ÎÊýµÄ´úÂë¾Í»á¶àÁ˺ܶࡣÈç¹ûÒ»²¿·Ö²ÎÊýµÄÊÕ¼¯Âß¼Äܹ»ÓÉÄ£¿éÀ´Íê³É£¬ÄÇÒ²¿ÉÒÔ×öµ½°ïController¼õÇḺµ£¡£·ñÔò¾Í¸Ð¾õ²ðµÃ²»Ì«¸É¾»£¬ÒòΪControllerÀïÃæ»¹ÊǶàÁËһЩ²»±ØÒªµÄ²ÎÊýÊÕ¼¯Âß¼¡£
Èç¹û²ð·Ö³öÀ´µÄÁ£¶È̫С£¬ControllerÔÚÍê³ÉÈÎÎñµÄʱºòµ÷¶È´úÂëҪдºÜ¶à£¬ÄÇÒ²²»Ì«ºÃ¡£µ¼Ö²ð·ÖÁ£¶ÈСµÄÊ×ÒªÒòËØ¾ÍÊÇÒµÎñ¿ÉÄܱ¾Éí¾Í±È½Ï¸´ÔÓ£¬²ð·ÖÁ£¶ÈС²¢²»ÊDz»ºÃ£¬ÄÜ´ó¾Í´óÒ»µã£¬Èç¹ûСÁË£¬ÄÇҲûÎÊÌâ¡£Õë¶ÔÕâÖÖÇé¿öµÄ´¦Àí£¬¾ÍÐèÒª²ÉÓÃstrategyģʽ¡£
Õë¶Ô²ð·ÖÁ£¶ÈСµÄÇé¿ö£¬ÎÒÀ´¾Ù¸öʵ¼ÊÀý×Ó£¬Õâ¸öÀý×ÓÀ´Ô´ÓÚÎÒµÄÒ»¸öÅóÓÑËûÔÚ×öÁÄÌìÓ¦ÓõÄÏûÏ¢·¢ËÍÄ£¿é¡£µ±ÏûÏ¢ÊÇÎÄ×Öʱ£¬Ö±½Ó·¢ËÍ¡£µ±ÏûÏ¢ÊÇͼƬʱ£¬ÐèÒªÏÈÏò·þÎñÆ÷ÉêÇëÉÏ´«×ÊÔ´£¬»ñµÃ×ÊÔ´IDÖ®ºóÔÙÉÏ´«Í¼Æ¬£¬ÉÏ´«Í¼Æ¬Íê³ÉÖ®ºóÄõ½Í¼Æ¬URL£¬ºóÃæ´ø×ÅURLÔÙ°ÑÐÅÏ¢·¢ËͳöÈ¥¡£
ÕâʱºòÎÒÃDzðÄ£¿é£¬¿ÉÒÔ²ð³É£ºÊý¾Ý·¢ËÍ£¨½ÐAÄ£¿é£©£¬ÉÏ´«×ÊÔ´ÉêÇ루½ÐBÄ£¿é£©£¬ÄÚÈÝÉÏ´«£¨½ÐCÄ£¿é£©¡£ÄÇôҪ·¢ËÍÎÄ×ÖÏûÏ¢£¬Controllerµ÷¶ÈA¾Í¿ÉÒÔÁË¡£Èç¹ûÒª·¢ËÍͼƬÏûÏ¢£¬Controllerµ÷¶ÈB->C->A£¬¼ÙÉ轫À´»¹ÓÐÉÏ´«±ðµÄÀàÐÍÏûÏ¢µÄÈÎÎñ£¬ËûÃÇÓÖÒªÒÀÀµD/E/FÄ£¿é£¬ÄÇÕâ¸öÊÂÇé¾ÍºÜµ°ÌÛ£¬ÒòΪÂß¼¸´ÔÓÁË£¬ControllerÒªµ÷¶ÈµÄ¶«Î÷񻂿·ÖµÄÇé¿ö¾Í¶àÁË£¬Controller¾ÍÅòÕÍÁË¡£
ÄÇôÔõô´¦ÀíÄØ£¿¿ÉÒÔ²ÉÓÃStrategyģʽ¡£ÎÒÃÇÔÙÀ´·ÖÎöһϣ¬ControllerÒªÍê³ÉÈÎÎñ£¬Ëü³õʼÇé¿öÏÂËù¾ßÓеÄÌõ¼þÊÇʲô£¿ËüÓÐÕâÌõÏûÏ¢µÄËùÓÐÊý¾Ý£¬Ò²ÖªµÀÕâ¸öÏûÏ¢µÄÀàÐÍ¡£ÄÇôËü×îÖÕÐèÒªµÄÊÇÊ²Ã´ÄØ£¿ÏûÏ¢·¢Ë͵Ľá¹û£º·¢Ëͳɹ¦»òʧ°Ü¡£

ÉÏÃæ¾ÍÊÇÎÒÃÇҪʵÏÖµÄ×îÖÕ½á¹û£¬ControllerÖ»Òª°ÑÏûÏ¢¶ª¸øMessageSender£¬È»ºóÈÃMessageSenderÈ¥×öÊÂÇ飬×öÍêÁ˸æËßController¾ÍºÃÁË¡£ÄÇôMessageSenderÀïÃæÔõôȥµ÷¶ÈÂß¼£¿MessageSenderÀïÃæ¿ÉÒÔÓÐÒ»¸öStrategyList£¬ÀïÃæ´æ·ÅÁ˱í´ï¸÷ÖÖÂß¼µÄBlock»òÕßInvocation£¨Target£Action£©¡£ÄÇôÎÒÃÇÏȶ¨ÒåÒ»¸öEnum£¬ÀïÃæ¹æ¶¨ÁËÿÖÖÈÎÎñËùÐèÒªµÄµ÷¶ÈÂß¼¡£
typedef NS_ENUM (NSUInteger, MessageSendStrategy)
{
MessageSendStrategyText = 0,
MessageSendStrategyImage = 1,
MessageSendStrategyVoice = 2,
MessageSendStrategyVideo = 3
} |
È»ºóÔÚMessageSenderÀïÃæµÄStrategyListÊÇÕâÑù£º
@property (nonatomic, strong) NSArray *strategyList;
self.strategyList = @[TextSenderInvocation, ImageSenderInvocation, VoiceSenderInvocation, VideoSenderInvocation];
// È»ºó¶ÔÍâÌṩһ¸öÕâÑùµÄ½Ó¿Ú£¬Í¬Ê±ÓÐÒ»¸ödelegateÓÃÀ´»Øµ÷
- (void)sendMessage:(BaseMessage *)message withStrategy:(MessageSendStrategy)strategy;
@property (nonatomic, weak) id<MessageSenderDelegate> delegate;
@protocol MessageSenderDelegate<NSObject>
@required
- (void)messageSender:(MessageSender *)messageSender
didSuccessSendMessage:(BaseMessage *)message
strategy:(MessageSendStrategy)strategy;
- (void)messageSender:(MessageSender *)messageSender
didFailSendMessage:(BaseMessage *)message
strategy:(MessageSendStrategy)strategy
error:(NSError *)error;
@end
|
ControllerÀïÃæÊÇÕâÑùʹÓõģº
[self.messageSender sendMessage:message withStrategy:MessageSendStrategyText]; |
MessageSenderÀïÃæÊÇÕâÑùµÄ£º
[self.strategyList[strategy] invoke]; |
È»ºóÔÚij¸öInvocationÀïÃæ£¬¾ÍÊÇÕâÑùµÄ£º
[A invoke];
[B invoke];
[C invoke]; |
ÕâÑù¾ÍºÃÀ²£¬¼´±ã²ð·ÖÁ£¶ÈÒòΪ¿Í¹ÛÔÒòÎÞ·¨Ï¸»¯£¬ÄÇÒ²ÄܰѸ´ÔÓµÄÅжÏÂß¼ºÍµ÷¶ÈÂß¼´ÓControllerÖгé³öÀ´£¬ÕæÕýΪController×öµ½Á˼õ¸º¡£×ÜÖ®Äܹ»×öµ½´óÁ£¶È¾Í¾¡Á¿´óÁ£¶È£¬ÊµÔÚ×ö²»µ½ÄÇÒ²ÐУ¬ÓÃStrategy°ÑËüholdס¡£Õâ¸öÀý×ÓÊÇСÁ£¶ÈµÄÇé¿ö£¬´óÁ£¶ÈµÄÇé¿öÌ«¼òµ¥£¬ÎҾͲ»¾ÙÁË¡£
Éè¼ÆÐÄ·¨
Õë¶ÔView²ãµÄ¼Ü¹¹²»¹âÊÇ¿´ÖØÈçºÎºÏÀíµØ²ð·ÖMVCÀ´¸øUIViewController¼õ¸º£¬ÁíÍâÒ»µãÒ²ÒªÕչ˵½ÒµÎñ·½µÄʹÓóɱ¾¡£×îºÃµÄÇé¿öÊÇÒµÎñ·½Ê²Ã´¶¼²»ÖªµÀ£¬È»ºóËû°Ñ´úÂë·Å½øÈ¥¾ÍÄÜÅÜ£¬Í¬Ê±»¹ÄÜ»ñµÃ¿ò¼ÜÌṩµÄÖÖÖÖ¹¦ÄÜ¡£
±ÈÈçÌì°²ÃŹ㳡ÉϵĹÛÖÚ¿´Ì¨£¬¾ÍÊÇÎÒ¾õµÃ×îºÃµÄÉè¼Æ£¬ÒòΪûÈË»á×¢Òâµ½Ëü¡£
- µÚÒ»ÐÄ·¨£º¾¡¿ÉÄܼõÉټ̳в㼶£¬Éæ¼°Æ»¹ûÔÉú¶ÔÏóµÄ¾¡Á¿²»Òª¼Ì³Ð
¼Ì³ÐÊÇ×ï¶ñ£¬¾¡Á¿²»Òª¼Ì³Ð¡£¾ÍÎÒĿǰÁ˽⵽µÄÇé¿ö¿´£¬³ýÁ˰²¾Ó¿ÍµÄPad AppûÓÐÔÚ¿ò¼Ü¼¶Õë¶ÔUIViewControllerÓм̳еÄÉè¼ÆÒÔÍ⣬ÆäËü¹«Ë¾»ò¶à»òÉÙ¶¼Õë¶ÔUIViewControllerÓм̳У¬°üÀ¨°²¾Ó¿ÍiPhone app£¨ÄÇʱºòÎÒÒѾ¶Ô´ËÎÞÄÜΪÁ¦£¬¿É¼ûViewµÄ¼Ü¹¹ÔÚÒ»¿ªÊ¼¾ÍÉè¼ÆºÃÓжàÃ´ÖØÒª£©¡£ÉõÖÁÓеϹ¶ÔUITableViewÓм̳У¬ÕâÊÇÒ»¼þ¶àôÁîÈË·¢Ö¸£¬¶àô²Ò¾øÈËå¾£¬¶àôɥÐIJ¡¿ñµÄÊÂÇé°¡¡£ËäÈ»²»¿É±ÜÃâµÄÊÇÓÐЩÇé¿öÎÒÃDz»µÃ²»´ÓÆ»¹ûÔÉú¶ÔÏóÖм̳У¬±ÈÈçUITableViewCell¡£µ«ÎÒ»¹Êǽ¨Ò龡Á¿²»ÒªÍ¨¹ý¼Ì³ÐµÄ·½°¸À´¸øÔÉú¶ÔÏóÌí¼Ó¹¦ÄÜ£¬Ç°ÃæÌáµ½µÄAspect·½°¸ºÍCategory·½°¸¶¼¿ÉÒÔʹÓá£ÓÃAspect£«loadÀ´ÊµÏÖÖØÔØº¯Êý£¬ÓÃCategoryÀ´ÊµÏÖÌí¼Óº¯Êý£¬µ±È»£¬Ë£µãÊÖ¶ÎÓÃCategoryÀ´Ìí¼ÓpropertyÒ²ÊÇûÎÊÌâµÄ¡£ÕâЩ·½°¸ÒѾ¸²¸ÇÁ˼̳еÄÈ«²¿¹¦ÄÜ£¬¶øÇҷdz£ºÃά»¤£¬¶ÔÓÚÒµÎñ·½Ò²¸ü¼Ó͸Ã÷£¬ºÎÀÖ¶ø²»ÎªÄØ¡£
²»Óü̳пÉÄÜÔÚ˼·Éϲ»»áÄÇôֱ¹Û£¬µ«ÊǶÔÓÚ²»Ê¹Óü̳дøÀ´µÄºÃ´¦ÊÇ×ã¹»¶¥µÃÉÏʹÓü̳еϵ´¦µÄ¡£Ë³±ãÔÚ´ËÎÒÒª¸øCategoryÕýÒ»ÏÂÃû£ºÒµ½ç¶ÔÓÚCategoryµÄ̬¶È±È½ÏêÓÃÁ£¬ÔÚ¶àÖÖ³¡ºÏ£¨½²×ù¡¢×ÊÁÏÎĵµ£©¶¼ÐûÑï¹ý¾¡¿ÉÄܲ»ÒªÊ¹ÓÃCategory¡£ËüÃÇ˵µÄ¶¼ÓÐÒ»¶¨µÀÀí£¬µ«ÎÒÈÏΪCategoryÊÇÆ»¹ûÌṩµÄ×îºÃµÄʹÓü¯ºÏ´úÌæ¼Ì³ÐµÄ·½°¸£¬µ«Õë¶ÔCategoryµÄÉè¼Æ¶Ô¼Ü¹¹Ê¦µÄÒªÇóÒ²ºÜ¸ß£¬ÇëºÏÀíʹÓ᣶øÇÒÆ»¹ûÒ²ÔںܶೡºÏʹÓÃCategory£¬À´°ÑÒ»¸öÔ±¾¿ÉÄܴܺóµÄ¶ÔÏ󣬸ù¾Ý²»Í¬³¡¾°²ð·Ö³É²»Í¬µÄCategory£¬´Ó¶øÌá¸ß¿Éά»¤ÐÔ¡£
²»Ê¹Óü̳еĺô¦ÎÒÔÚÕâÀïÒѾ˵ÁË£¬·Åµ½iOSÓ¦Óüܹ¹À´¿´£¬»¹ÄÜÔÙ¶à¶îÍâÁ½¸öºÃ´¦£º1. ÔÚÒµÎñ·½×öÒµÎñ¿ª·¢»òÕß×öDemoʱ£¬¿ÉÒÔÍÑÀëApp»·¾³£¬»ò»¨¸üÉÙµÄʱ¼ä´î½¨»·¾³¡£2. ¶ÔÒµÎñ·½À´Ëµ¹¦Äܸü¼Ó͸Ã÷£¬Ò²·ûºÏÒµÎñ·½ÔÚ¿ª·¢Ê±µÄµÚÒ»Ö±¾õ¡£
- µÚ¶þÐÄ·¨£º×öºÃ´úÂë¹æ·¶£¬¹æ¶¨ºÃ´úÂëÔÚÎļþÖеIJ¼¾Ö£¬ÓÈÆäÊÇViewController
ÕâÖ÷ÒªÊÇΪÁËÌá¸ß¿Éά»¤ÐÔ¡£ÔÚÒ»¸öÎļþ·Ç³£´óµÄ¶ÔÏóÖУ¬ÓÈÆäÒªÏÞÖÆºÃ²»Í¬ÀàÐ͵ĴúÂëÔÚÎļþÖеIJ¼¾Ö¡£±ÈÈçÔÚдViewControllerʱ£¬ÎÒ֮ǰ¸øÍŶÓÖÆ¶¨µÄ¹æ·¶¾ÍÊÇÇ°ÃæÒ»¶ÎÈ«²¿ÊÇgetter setter£¬È»ºó½ÓÏÂÀ´Ò»¶ÎÊÇlife cycle£¬viewDidLoadÖ®ÀàµÄ·½·¨¶¼ÔÚÕâÀȻºóÏÂÃæÒ»¶ÎÊǸ÷ÖÖҪʵÏÖµÄDelegate£¬ÔÙÏÂÃæÒ»¶Î¾ÍÊÇevent response£¬ButtonµÄ»òÕßGestureRecognizerµÄ¶¼ÔÚÕâÀȻºóºóÃæÊÇprivate method¡£Ò»°ãÇé¿öÏ£¬Èç¹û×öºÃ²ð·Ö£¬ViewControllerµÄprivate methodÄÇÒ»¶ÎÊÇûÓз½·¨µÄ¡£ºóÀ´Ëæ×Åʱ¼äµÄÍÆÒÆ£¬ÎÒ·¢ÏÖ¿ªÍ··ÅgetterºÍsetter̫ӰÏìÔĶÁÁË£¬ËùÒÔºóÃæ¸Ä³ÉÈ«·ÅÔÚViewControllerµÄ×îºó¡£
- µÚÈýÐÄ·¨£ºÄܲ»·ÅÔÚController×öµÄÊÂÇé¾Í¾¡Á¿²»Òª·ÅÔÚControllerÀïÃæÈ¥×ö
Controller»á±äµÃÅÓ´óµÄÔÒò£¬Ò»·½ÃæÊÇÒòΪController³ÐÔØÁËÒµÎñÂß¼£¬MVCµÄ×ܽáÕߣ¨ÔÚÕýʽÌá³öMVC֮ǰ£¬»ò¶à»òÉÙ¶¼ÓÐÈËÕâôÉè¼Æ£¬ËùÒÔ˵MVCµÄÉè¼ÆÕß²»Ì«×¼È·£©¶ÔControllerÏµĶ¨ÒåÒ²ÊdzÐÔØÒµÎñÂß¼£¬ËùÒÔController¾ÍÊÇÓÃÀ´¸ÉÕâʶùµÄ£¬Ìì¾µØÒå¡£ÁíÒ»·½ÃæÊÇÒòΪÔÚMVCÖУ¬¹ØÓÚModelºÍViewµÄ¶¨Òå¶¼·Ç³£Ã÷È·£¬ºÜÉÙÓÐÈË»á°ÑÒ»¸öÊôÓÚM»òVµÄ¶«Î÷·Åµ½ÆäËûµØ·½¡£È»ºó³ýÁËModelºÍViewÒÔÍ⣬»¹»áʣϺܶàÄ£ÀâÁ½¿ÉµÄ¶«Î÷£¬ÕâЩ¶«Î÷´Ó¸ÅÄîÉϽ²¶¼ËãController£¬¶øÇÒÓÉÓÚMºÍV¶¨ÒåµÃÄÇôÃ÷È·£¬ËùÒÔÖ±¾õÉÏ¿´£¬ÕâЩ¶«Î÷·ÅÔÚM»òVÊDz»ºÏÊʵģ¬ÓÚÊǾÍÍùControllerÀïÃæÈû¿©¡£
ÕýÊÇÓÉÓÚÉÏÊöÁ½·½ÃæÔÒòµ¼ÖÂÁËControllerµÄÅòÕÍ¡£ÎÒÃÇÔÙϸϸ˼¿¼Ò»Ï£¬ModelÅòÕͺÍViewÅòÕÍ£¬ÒªÕë¶ÔËüÃÇÀ´×ö²ð·ÖÆäʵ¶¼ÊÇÏà¶ÔÈÝÒ׵ģ¬ControllerÅòÕÍÖ®ºó£¬²ð·Ö¾ÍÏԵüèÄÑÎޱȡ£ËùÒÔÈç¹ûÄܹ»ÔÚÒ»¿ªÊ¼¾Í¾¡Á¿°ÑÄܲ»·ÅÔÚController×öµÄÊÂÇé·Åµ½±ðµÄµØ·½È¥×ö£¬ÕâÑùÔÚµÚһʱ¼ä¾Í¿ÉÒÔÈÃÄãµÄÄDz¿·Ö½«À´¿ÉÄܻᱻ²ð·ÖµÄ´úÂëÔ¶ÀëÒµÎñÂß¼¡£ËùÒÔÎÒÃÇÒªÉÔ΢ת±äÒ»ÏÂ˼·£ºÄ£ÀâÁ½¿ÉµÄÄ£¿é£¬¾Í²»ÒªÈûµ½ControllerÈ¥ÁË£¬Èûµ½V»òÕßÈûµ½M»òÕ߯äËûʲôµØ·½¶¼±ÈÈû½øControllerºÃ£¬±ãÓÚ½«À´²ð·Ö¡£
ËùÒÔ¹ØÓÚÇ°ÃæÎÒ°´Ï²»±íµÄ¹ØÓÚÅÖModelºÍÊÝModelµÄÑ¡Ôñ£¬ÎÒµÄ̬¶ÈÊǸüÇãÏòÓÚÅÖModel¡£¿Í¹ÛµØËµ£¬ÒµÎñÅòÕÍÖ®ºó£¬´úÂë¹æÄ£¿Ï¶¨ÉÙ²»Á˵쬲»¹ÜÄã¼¼ÊõÔٺ㬾ÑéÔٷḻ£¬´úÂëÁ¿×î¶àÖ»ÄÜÓÅ»¯£¬¸ÃÅòÕÍ»¹ÊÇÒªÅòÕ͵쬶øÇÒÓÅ»¯Ö®ºó´úÂëÍùÍùÒ²±È½ÏÄÑ¿´£¬Ê¹Óø÷ÖÖÆæ¼¼ÒùÇÉÒ²ÊÇÓдú¼ÛµÄ¡£ËùÒÔ£¬Õë¶Ô´úÂëÁ¿ÓÅ»¯µÄ½á¹û£¬ÍùÍùҪô¾ÍÊÇÎþÉü¿É¶ÁÐÔ£¬ÒªÃ´¾ÍÊÇÎþÉü¿ÉÒÆÖ²ÐÔ£¨Í¨ÓÃÐÔ£©£¬Every magic always needs a pay, you have to make a trade-off.¡£
ÄÇô¼ÈÈ»ÅòÕͳöÀ´µÄ´úÂ룬»òÕß½«À´ÓпÉÄÜÅòÕ͵ĴúÂ룬²»¹Ü·ÅÔÚMVCÖеÄÄÄÒ»¸ö²¿·Ö£¬×îºó¶¼ÊÇÒª²ð·ÖµÄ£¬¼ÈÈ»³ÙÔçÒª²ð·Ö£¬ÄDz»Èç·ÅModelÀïÃæ£¬ÕâÑù½«À´²ð·ÖÅÖModelÒ²ÄܱȲð·ÖÅÖCotroller¸ü¼ÓÈÝÒס£ÔÚÎÒ»¹ÔÚ°²¾Ó¿ÍµÄʱºò£¬°²¾Ó¿ÍPad app³ÐÔØ×ÔÓÒµÎñµÄViewController²Å²»µ½600ÐУ¬ÆäËû¶àÊýController¶¼ÊÇÔÚ300-400ÐÐÖ®¼ä£¬Õâ¾ÍΪºóÃæ½ÓÊÖµÄÈ˽µµÍÁ˷dz£¶àµÄÉÏÊÖÄѶȺÍά»¤¸´ÔÓ¶È¡£²ð·Ö³öÀ´µÄ¶«Î÷¶¼ÊÇ¿ÉÒÔÖ±½ÓÇ¨ÒÆ¸øiPhone appʹÓõġ£ÏÖÔÚ¿´ÌìèµÄViewControler£¬¶¯²»¶¯¾Í¼¸Ç§ÐУ¬¿´²»Á˶à¾ÃÍ·¾ÍÔÎÁË£¬ÎÊÁËһϣ¬´ó¼Ò¶¼±íʾºÜϰ¹ßÕâÑùµÄ´úÂ볤¶È£¬Ì¯ÊÖ¡£
- µÚËÄÐÄ·¨£º¼Ü¹¹Ê¦ÊÇΪҵÎñ¹¤³Ìʦ·þÎñµÄ£¬¶ø²»ÊÇȥʹ»½ÒµÎñ¹¤³ÌʦµÄ
¼Ü¹¹Ê¦ÔÚ¹«Ë¾ÀïµÄÖ°¼¶ºÍµØÎ»ÍùÍù¶¼ÊÇÒª¸ßÓÚÒµÎñ¹¤³ÌʦµÄ£¬¼Ü¹¹Ê¦µÄ¼¼ÊõʵÁ¦ºÍ¾ÑéÍùÍùÒ²¶¼ÊǸßÓÚÒµÎñ¹¤³ÌʦµÄ¡£ËùÒÔÄãÖµµÃÔÚ¹«Ë¾Àï»ñµÃ½Ï¸ßµÄµØÎ»£¬µ«ÊÇÔÚ¹«Ë¾ÀïµÄµØÎ»¸ß²»´ú±íÔÚÈí¼þ¹¤³ÌÀïÃæµÄ½ÇÉ«µØÎ»Ò²¸ß¡£¼Ü¹¹Ê¦ÊÇҪΪҵÎñ¹¤³Ìʦ·þÎñµÄ£¬ÊÇËûÃÇʹ»½Äã¶ø²»ÊÇÄãʹ»½ËûÃÇ¡£ÁíÍâ£¬ÖÆ¶¨¹æ·¶Ò»·½ÃæÊÇÆðµ½Ô¼ÊøÒµÎñ¹¤³ÌʦµÄ´úÂ룬µ«¸üÖØÒªµÄÒ»µãÊÇ£¬ÕâÆäʵÊÇÀûÓÃÄãµÄÄÜÁ¦°ïÖúÒµÎñ¹¤³Ìʦ±ÜÃâËûÎÞ·¨Ô¤¼ûµÄΣ»ú£¬ËùÒÔµØÎ»¸ßÓÐÒ»¶¨µÄºÃ´¦£¬±Ï¾¹Ïij治¿ÉÓï±ù£¬ÓеÄʱºò²»¼ûµÃÄܹ»½âÊ͵Ãͨ£¬Òò´Ë¸ßµØÎ»ËæÖ®¶øÀ´µÄ¾ÍÊÇ˵·þÁ¦»á±È½ÏÇ¿¡£µ«ÔÚÈí¼þ¹¤³ÌÀһ¶¨Òª±£³ÖÇ«±°£¬Ò»¶¨Òª¶àΪҵÎñ¹¤³Ìʦ¿¼ÂÇ¡£
Ò»¸ö²»¶®Õâ¸öµÀÀíµÄ¼Ü¹¹Ê¦£¬Éè¼Æ³öÀ´µÄ¶«Î÷ÍùÍù¸´ÔÓÄÑÓã¬ÒòΪËûÖ»Ô¸Òâ×öºËÐĵĶ«Î÷£¬Öܱ߲»Ô¸Òâ×öµÄ¶¼ÆÚÍû½»¸øÒµÎñ¹¤³Ìʦȥ×ö£¬ÉõÖÁÓеÄʱºò¾ÍÖ»×öÁ˸öDemo£¬È»ºó¾Í½»¸øÒµÎñ¹¤³ÌʦÁË£¬ÒµÎñ¹¤³Ìʦ±ä³É¸øËû´ò¹¤µÄÁË¡£µ«ÊÇÒ»¸ö¶®µÃÕâ¸öµÀÀíµÄ¼Ü¹¹Ê¦£¬Éè¼Æ³öÀ´µÄ¶«Î÷»á·Ç³£ºÃÓã¬ÒµÎñ·½Ö»ÐèÒªÈÓºÜÉٵIJÎÊýÈ»ºóÄýá¹û¾ÍºÃÁË£¬ÕâÑùµÄ¼Ü¹¹²Å½ÐºÃµÄ¼Ü¹¹¡£
¾ÙÒ»¸ö±£´æÍ¼Æ¬µ½±¾µØµÄÀý×Ó£¬Ò»ÖÖ×ö·¨ÊÇÌṩÕâÑùµÄ½Ó¿Ú£º- (NSString *)saveImageWithData:(NSData *)imageData£¬ÁíÒ»ÖÖÊÇ- (NSString *)saveImage:(UIImage *)image¡£ºóÕ߸üºÃ£¬ÔÒò×Ô¼ºÏë¡£
ÄãµÄ̬¶ÈԽǫ±°£¬¾ÍÔ½ÄÜÉè¼Æ³öºÃµÄ¼Ü¹¹£¬ÕâÊÇÎÒÉè¼ÆÐÄ·¨ÀïµÄ×îºóÒ»Ìõ£¬Ò²ÊÇ×îÖØÒªµÄÒ»Ìõ¡£¼´Ê¹ÄãÏÖÔÚ¼¼ÊõʵÁ¦²»ÊÇÒµ½ç´óÅ£¼¶±ðµÄ£¬µ«Ö»Òª±£³ÖÕâ¸öÐÄ̬ȥ×ö¼Ü¹¹£¬È¥×öÉè¼Æ£¬¾ÍÒѾÊǺϸñµÄ¼Ü¹¹Ê¦ÁË£¬Òª³ÉΪҵ½ç´óÅ£Ò²»á·Ç³£¿ì¡£
С×ܽá
ÆäʵÕë¶ÔView²ãµÄ¼Ü¹¹Éè¼Æ£¬»¹ÊÇÒª×öºÃÈýµã£º´úÂë¹æ·¶£¬¼Ü¹¹Ä£Ê½£¬¹¤¾ß¼¯¡£
´úÂë¹æ·¶¶ÔÓÚView²ãÀ´ËµÒâÒåÖØ´ó£¬±Ï¾¹View²ã·Ç³£ÖØÒµÎñ£¬Èç¹û´úÂë²¼¾Ö»ìÂÒ£¬ºóÀ´ÕߺÜÄѽÓÊÖ£¬Ò²ºÜÄÑά»¤¡£
¼Ü¹¹Ä£Ê½¾ßÌåÈçºÎÑ¡Ôñ£¬Íêȫȡ¾öÓÚÒµÎñ¸´ÔÓ¶È¡£Èç¹ûÒµÎñÏ൱Ï൱¸´ÔÓ£¬ÄǾͿÉÒÔʹÓÃVIPER£¬Èç¹ûÏà¶Ô¼òµ¥£¬ÄǾÍÖ±½ÓMVCÉÔ΢¸Ä¸Ä¾ÍºÃÁË¡£Ã¿Ò»ÖÖÒѾ³ÉΪ¶¨Ê½µÄ¼Ü¹¹Ä£Ê½²»¼ûµÃ¶¼Êʺϸ÷×Ô¹«Ë¾¶ÔÓ¦µÄÒµÎñ£¬ËùÒÔÐèÒª¸÷λ¼Ü¹¹Ê¦¸ù¾ÝÇé¿öÈ¥×öһЩ²ð·Ö»òÕ߸ı䡣²ð·ÖÒ»°ã¶¼²»»á³öÏÖÎÊÌ⣬¸Ä±äµÄʱºò£¬Ö»Òª±ð°ÑMVCÈý¸ö½ÇÉ«¸ã»ì¾ÍºÃÁË£¬M¸Ã×öɶ×öɶ£¬C¸Ã×öɶ×öɶ£¬V¸Ã×öɶ×öɶ£¬²»ÒªÂÒÀ´¡£¹ØÓڴ󲿷ֵļܹ¹Ä£Ê½Ó¦¸ÃÊÇʲôÑù×Ó£¬ÕâÆªÎÄÕÂÀï¶¼ÒѾ˵¹ýÁË£¬²»¹ýÎÒÈÏΪ×îÖØÒªµÄ»¹ÊǺóÃæµÄÐÄ·¨£¬Ä£Ê½Ö»ÊÇÕÐÊõ£¬ÊìϤÁËÐÄ·¨²ÅÄÜ´óÇɲ»¹¤¡£
View²ãµÄ¹¤¾ß¼¯Ö÷Òª»¹ÊǼ¯ÖÐÔÚÈçºÎ¶ÔView½øÐв¼¾Ö£¬ÒÔ¼°Ò»Ð©Ìض¨µÄView£¬±ÈÈç´øËÑË÷ÌáʾµÄËÑË÷¿òÕâÖÖ¡£ÕâÆªÎÄÕÂÖ»Ìáµ½ÁËView²¼¾ÖµÄ¹¤¾ß¼¯£¬ÆäËüµÄ¹¤¾ß¼¯Ïà¶Ô¶øÑÔÊǸü¼ÓÈ¡¾öÓÚ¸÷×Ô¹«Ë¾µÄÒµÎñµÄ£¬¸÷×ÔʵÏÖ»òÕßʹÓÃCocoaPodsÀïÏֳɵͼ²»ÊǺÜÄÑ¡£
¶ÔÓÚС¹æÄ£»òÕßÖеȹæÄ£iOS¿ª·¢ÍŶÓÀ´Ëµ£¬×öºÃÒÔÉÏÈýµã¾Í×ã¹»ÁË¡£ÔÚ´ó¹æÄ£ÍŶÓÖУ¬ÓÐÒ»¸ö¶îÍâÎÊÌâÒª¿¼ÂÇ£¬¾ÍÊÇ¿çÒµÎñÒ³Ãæµ÷Ó÷½°¸µÄÉè¼Æ¡£
¿çÒµÎñÒ³Ãæµ÷Ó÷½°¸µÄÉè¼Æ
¿çÒµÎñÒ³Ãæµ÷ÓÃÊÇÖ¸£¬µ±Ò»¸öAppÖдæÔÚAÒµÎñ£¬BÒµÎñµÈ¶à¸öÒµÎñʱ£¬BÒµÎñÓпÉÄÜ»áÐèҪչʾAÒµÎñµÄij¸öÒ³Ãæ£¬AÒµÎñÒ²ÓпÉÄÜ»áµ÷ÓÃÆäËûÒµÎñµÄij¸öÒ³Ãæ¡£ÔÚС¹æÄ£µÄAppÖУ¬ÎÒÃÇÖ±½ÓimportÆäËûÒµÎñµÄij¸öViewControllerÈ»ºó»òÕßpush»òÕßpresent£¬ÊDz»»á²úÉúÌØ±ð´óµÄÎÊÌâµÄ¡£µ«ÊÇÈç¹ûAppµÄ¹æÄ£·Ç³£´ó£¬Éæ¼°ÒµÎñÊýÁ¿·Ç³£¶à£¬ÔÙÕâôֱ½Óimport¾Í»á³öÏÖÎÊÌâ¡£

¿ÉÒÔ¿´³ö£¬¿çÒµÎñµÄÒ³Ãæµ÷ÓÃÔÚ¶àÒµÎñ×é³ÉµÄAppÖлᵼÖºáÏòÒÀÀµ¡£ÄÇôÏñÕâÑùµÄºáÏòÒÀÀµ£¬Èç¹û²»È¥Éè·¨½â¾ö£¬»áµ¼ÖÂʲôÑùµÄ½á¹û£¿
- µ±Ò»¸öÐèÇóÐèÒª¶àÒµÎñºÏ×÷¿ª·¢Ê±£¬Èç¹ûÖ±½ÓÒÀÀµ£¬»áµ¼ÖÂijЩÒÀÀµ²ãÉ϶˵ÄÒµÎñ¹¤³ÌʦÔÚǰÆÚ¿Õת£¬ÒÀÀµ²ã϶˵Ť³ÌʦÈÎÎñ·±ÖØ£¬¶øÕû¸öÐèÇóÍê³ÉµÄËÙ¶È»á±äÂý£¬Ó°ÏìµÄÊÇÍŶӿª·¢µü´úËÙ¶È¡£
- µ±Òª¿ª±ÙÒ»¸öÐÂÒµÎñʱ£¬Èç¹ûÒÑÓи÷ÒµÎñ¼äÖ±½ÓÒÀÀµ£¬ÐÂÒµÎñÓÖÒÀÀµÄ³¸ö¾ÉÒµÎñ£¬¾Íµ¼ÖÂÐÂÒµÎñµÄ¿ª·¢»·¾³´î½¨À§ÄÑ£¬ÒòΪ±ØÐëÒª°ÑËùÓÐÏà¹ØÒµÎñ¶¼ÈûÈ뿪·¢»·¾³£¬ÐÂÒµÎñ²ÅÄܽøÐпª·¢¡£Ó°ÏìµÄÊÇÐÂÒµÎñµÄÏìÓ¦ËÙ¶È¡£
- µ±Ä³Ò»¸ö±»ÆäËûÒµÎñÒÀÀµµÄÒ³ÃæÓÐËùÐÞ¸Äʱ£¬±ÈÈç¸ÄÃû£¬Éæ¼°µ½µÄÐÞ¸ÄÃæ¾Í»áÌØ±ð´ó¡£Ó°ÏìµÄÊÇÔì³ÉÈÎÎñÁ¿ºÍά»¤³É±¾¶¼ÉÏÉýµÄ½á¹û¡£
µ±È»£¬Èç¹ûApp¹æÄ£ÌرðС£¬ÕâÈýµã´øÀ´µÄÓ°ÏìÒ²»áÌØ±ðС£¬µ«ÊÇÔÚ°¢ÀïÕâÑù´ó¹æÄ£µÄÍŶÓÖУ¬ÏñÌì裯ÌÔ±¦ÕâÑù´ó¹æÄ£µÄApp£¬Ò»µ©ÓöÉÏÕâÀïÃæÄÄÅÂÆäÖÐÒ»¼þÊÂÇ飬¾ÍÌØÃ´ºÜ¿Óµù¡£
ÄÇôӦ¸ÃÔõÑù´¦ÀíÕâ¸öÎÊÌ⣿
ÈÃÒÀÀµ¹ØÏµÏ³Á¡£
ÔõôÈÃÒÀÀµ¹ØÏµÏ³Á£¿ÒýÈëMediatorģʽ¡£
ËùνÒýÈëMediatorģʽÀ´ÈÃÒÀÀµ¹ØÏµÏ³Á£¬ÊµÖÊÉϾÍÊÇÿ´Îºô»½Ò³ÃæµÄʱºò£¬Í¨¹ýÒ»¸öÖмäÈËÀ´ÕÙ»½ÁíÍâÒ»¸öÒ³Ãæ£¬ÕâÑùֻҪÿ¸öÒµÎñÒÀÀµÕâ¸öÖмäÈ˾ͿÉÒÔÁË£¬ÖмäÈ˵ĽÇÉ«¾Í¿ÉÒÔ·ÅÔÚÒµÎñ²ãµÄÏÂÃæÒ»²ã£¬Õâ¾ÍÊÇÒÀÀµ¹ØÏµÏ³Á¡£

µ±AÒµÎñÐèÒªµ÷ÓÃBÒµÎñµÄij¸öÒ³ÃæµÄʱºò£¬½«ÇëÇ󽻸øMediater£¬È»ºóÓÉMediaterͨ¹ýijÖÖÊֶλñÈ¡µ½BÒµÎñÒ³ÃæµÄʵÀý£¬½»»¹¸øA¾ÍÐÐÁË¡£ÔÚ¾ßÌåʵÏÖÕâ¸ö»úÖÆµÄ¹ý³ÌÖУ¬ÓÐÒÔϼ¸¸öÎÊÌâÐèÒª½â¾ö£º
- Éè¼ÆÒ»Ì×ͨÓõÄÇëÇó»úÖÆ£¬ÇëÇó»úÖÆÐèÒª¸úÒµÎñ°þÀ룬ʹµÃ²»Í¬ÒµÎñµÄÒ³ÃæÇëÇó¶¼Äܹ»±»Mediater´¦Àí
- Éè¼ÆMediater¸ù¾ÝÇëÇóÈçºÎ»ñÈ¡ÆäËûÒµÎñµÄ»úÖÆ£¬MediaterÐèÒªÖªµÀÈçºÎ´¦ÀíÇëÇó£¬ÉÏÄĶùÈ¥ÕÒµ½ÐèÒªµÄÒ³Ãæ
Õâ¸ö¿´ÆðÀ´¾Í·Ç³£ÏñÎÒÃÇweb¿ª·¢Ê±ºòµÄURL»úÖÆ£¬·¢ËÍÒ»¸öGet»òPostÇëÇó£¬CGIµ÷Óýű¾°ÑÇëÇó·Ö·¢¸øÄ³¸öControllerϵÄij¸öAction£¬È»ºó·µ»ØHTML×Ö·û´®µ½ä¯ÀÀÆ÷È¥½âÎö¡£Æ»¹û±¾ÉíҲʵÏÖÁËÒ»Ì׿çAppµ÷ÓûúÖÆ£¬ËüÒ²ÊÇ»ùÓÚURL»úÖÆÀ´ÔËתµÄ£¬Ö»²»¹ýËüÏëÒª½â¾öµÄÎÊÌâÊÇ¿çAppµÄÊý¾Ý½»Á÷ºÍÒ³Ãæµ÷Óã¬ÎÒÃÇÏëÒª½â¾öµÄÎÊÌâÊǽµµÍ¸÷ÒµÎñµÄñîºÏ¶È¡£
²»¹ýÎÒÃÇ»¹²»ÄÜÖ±½ÓʹÓÃÆ»¹ûÔÉúµÄÕâÌ×»úÖÆ£¬ÒòΪÕâÌ×»úÖÆ²»Äܹ»·µ»Ø¶ÔÏóʵÀý¡£¶øÎÒÃÇÏ£ÍûÄܹ»Äõ½¶ÔÏóʵÀý£¬ÕâÑù²»¹â¿ÉÒÔ×ö¿çÒµÎñÒ³Ãæµ÷Óã¬Ò²¿ÉÒÔ×ö¿çÒµÎñµÄ¹¦Äܵ÷Óá£ÁíÍ⣬ÎÒÃÇÓÖÏ£ÍûÎÒÃǵÄMediaterÒ²Äܹ»¸úÆ»¹ûÔÉúµÄ¿çAppµ÷ÓüæÈÝ£¬ÕâÑù¾ÍÓÖÄܰïÒµÎñ·½Ê¡µôÒ»²¿·Ö¿ª·¢Á¿¡£
¾ÍÎÒĿǰËùÖªµÀµÄÇé¿ö£¬AutoCadÆìÏÂij¿îiOSÓ¦Óã¨Ê±¼äÓеã¾ÃÎÒ²»¼ÇµÃÊÇÄÄ¿îÓ¦ÓÃÁË£¬Èç¹ûÄãÊÇAutoCadµÄiOS¿ª·¢£¬¿ÉÒÔÔÚÆÀÂÛÇø²¹³äһϡ££©¾Í²ÉÓÃÁËÕâÖÖÒ³Ãæµ÷Ó÷½Ê½¡£ÌìèÀïÃæÄ¿Ç°Ò²ÔÚʹÓÃÕâÌ×»úÖÆ£¬Ö»ÊÇÕâÒ»¿éÓÉÓÚÀúÊ·ÔÒò´æÔÚÐÂÀϰ汾»ìÓõÄÇé¿ö£¬Òò´ËÔÝʱ»¹Ã»Äܹ»ºÜºÃµØ·¢»ÓÓ¦ÓеÄ×÷Óá£
àÅ£¬ÏëÎÊÎÒÒªDemoµÄͬѧ£¬ÎÒ¿ÉÒԺܴ󷽵ظæËßÄ㣬ûÓС£²»¹ýÎÒ´òËã³éʱ¼äдһ¸ö³öÀ´£¬ÏÖÔÚ³ýÁËÒѾÏëºÃÃû×Ö½ÐSummonÒÔÍ⣬ÆäËüʲô¶¼Ã»×ö£¬¹þ¹þ¡£
¹ØÓÚGetterºÍSetter£¿
ÎұȽÏϰ¹ßÒ»¸ö¶ÔÏóµÄ"˽ÓÐ"ÊôÐÔдÔÚextensionÀïÃæ£¬È»ºóÕâЩÊôÐԵijõʼ»¯È«²¿·ÅÔÚgetterÀïÃæ×ö£¬ÔÚinitºÍdeallocÖ®Í⣬ÊDz»»á³öÏÖÈκÎÀàËÆ_propertyÕâÑùµÄд·¨µÄ¡£¾ÍÊÇÕâÑù£º
@interface CustomObject()
@property (nonatomic, strong) UILabel *label;
@end
@implement
#pragma mark - life cycle
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:self.label];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.label.frame = CGRectMake(1, 2, 3, 4);
}
#pragma mark - getters and setters
- (UILabel *)label
{
if (_label == nil) {
_label = [[UILabel alloc] init];
_label.text = @"1234";
_label.font = [UIFont systemFontOfSize:12];
... ...
}
return _label;
}
@end |
ÌÆÇÉ˵Ëûϲ»¶µÄ×ö·¨ÊÇÓÃ_propertyÕâÖÖ£¬È»ºó¹ØÓÚ_propertyµÄ³õʼ»¯Í¨¹ý[self setupProperty]ÕâÖÖ×ö·¨È¥×ö¡£´Ó¸Õ²ÅÉÏÃæµÄ´úÂëÀ´¿´£¬¾ÍÊÇÒªÔÚviewDidLoadÀïÃæ¶àµ÷ÓÃÒ»¸ösetup·½·¨¶øÒÑ£¬È»ºóÎÒÍÆ¼öµÄ·½·¨¾ÍÊDz»Óöàµ÷Ò»¸ösetup·½·¨£¬Ö±½Ó×ßgetter¡£
àÅ£¬ÔõÃ´ËµÄØ£¬ÆäʵÁ½ÖÖ×ö·¨¶¼ÄÜÍê³ÉÐèÇó¡£µ«ÊÇ´ÓÁíÒ»¸ö½Ç¶È¿´£¬Æ»¹ûÖ®ËùÒÔÑ¡ÔñÈÃ[self getProperty]ºÍself.property¿ÉÒÔ»¥ÏàͨÓã¬ÕâÖÖ×ö·¨ÒѾºÜÃ÷ÏԵرí´ïÁËÆ»¹ûµÄÇãÏò£ºÏ£Íûÿ¸öproperty¶¼ÊÇͨ¹ýgetter·½·¨À´»ñµÃ¡£
ÔçÔÚ2003Ä꣬Allen Holub¾Í·¢ÁËÆªÎÄÕ¡¶Why getter and setter methods are evil¡·£¬×Ô´ËÖ®ºó£¬Òµ½ç¾Í¶Ô´Ë²úÉúÁ˸÷ÖÖÕùÒ飬ËäÈ»ÊÇ´ÓJava¿ªÊ¼ËµµÄ£¬µ«ÊÇ·¢Õ¹µ½ºóÃæ¸÷ÖÖÓïÑÔÒ²²ÎÓëÁ˽øÀ´¡£È»ºóËäÈ»ÏÖÔÚ¹ØÓÚÕâ¸öÎÊÌâÌÖÂÛµÃÉÙÁË£¬µ«ÊÇÒÀ¾ÉÊôÓÚûÓж¨ÂÛµÄ״̬¡£setterµÄÇé¿ö±È½Ï¸´ÔÓ£¬Ò²²»ÊÇÎÒÕâÒ»½ÚµÄÖØµã£¬ÎÒÕâ±ß»¹ÊÇÖ÷Ҫ˵getter¡£ÎÒÃÇ´ÓobjcµÄÉè¼ÆÀ´¿´£¬Æ»¹ûµÄÉè¼ÆÕ߸ü¼ÓÇãÏòÓÚgetter is not evil¡£
ÈÏΪgetter is evilµÄÔÒòÓзdz£Ö®¶à£¬»ò´ó»òС£¬Ëæ×ÅÕùÂ۵ĽøÐУ¬´ó¼ÒÂýÂý¾Í¾Û½¹µ½ÕâÑùµÄÒ»¸öÔÒò£ºGetterºÍSetterÌṩÁËÒ»¸öÄÜÈÃÍⲿÐ޸ĶÔÏóÄÚ²¿Êý¾ÝµÄ·½Ê½£¬ÕâÊÇevilµÄ£¬Õý³£Çé¿öÏ£¬Ò»¸ö¶ÔÏó×Ô¼ºË½ÓеıäÁ¿Ó¦¸ÃÊÇÖ»ÓÐ×Ô¼º¹ØÐÄ¡£
È»ºóÎÒÃǻص½iOSÁìÓòÀ´£¬objcҲͬÑùÃæÁÙÁËÕâÑùµÄÎÊÌ⣬ÉõÖÁ¸ü¼ÓÑÏÖØ£ºobjc²¢Ã»ÓÐÏñJavaÄÇôÑϸñµÄ˽ÓиÅÄî¡£µ«ÔÚʵ¼Ê¹¤×÷ÖУ¬ÎÒÃDz»Ì«»áÈ¥²Ù×÷Í·ÎļþÀïÃæÃ»ÓеıäÁ¿£¬ÕâÊǴӹ淶ÉϾͱ»½ûÖ¹µÄ¡£
ÈÏΪgetter is not evilµÄÔÒòÒ²¿ÉÒÔ¾Û½¹µ½Ò»¸ö£º¸ß¶ÈµÄ·â×°ÐÔ¡£getterÊÂʵÉÏÊǹ¤³§·½·¨£¬ÓÐÁËgetterÖ®ºó£¬ÒµÎñÂß¼¿ÉÒÔ¸ü¼ÓרעÓÚµ÷Ó㬶ø²»±Øµ£Ðĵ±Ç°±äÁ¿ÊÇ·ñ¿ÉÓá£ÎÒÃÇ¿ÉÒÔÏëһϣ¬¼ÙÉèÒ»¸öViewControllerÓÐ20¸ösubviewÒª¼ÓÈëviewÖУ¬Õâ20¸ösubviewµÄ³õʼ»¯´úÂëÊǿ϶¨ÌÓ²»µôµÄ£¬·ÅÔÚÄÄÀï±È½ÏºÃ£¿·ÅÔÚÄÄÀï¶¼±È·ÅÔÚaddsubviewµÄµØ·½ºÃ£¬ÎÒ¸öÈËÈÏΪ×îºÃµÄµØ·½»¹ÊÇ·ÅÔÚgetterÀïÃæ£¬½áºÏµ¥Àýģʽ֮ºó£¬´úÂë»á·Ç³£ÕûÆë£¬Éú²úµÄµØ·½ºÍʹÓõĵط½µÃµ½Á˺ܺõÄÇø·Ö¡£
ËùÒԷŵ½iOSÀ´Ëµ£¬ÎÒ»¹ÊǾõµÃʹÓÃgetter»á±È½ÏºÃ£¬ÒòΪevilµÄµØ·½ÔÚiOSÕâ±ß»ù±¾¶¼±ÜÃâÁË£¬not evilµÄµØ·½¶¼ÄÜÏíÊܵ½£¬»¹ÊDz»´íµÄ¡£
×ܽá
Òª×öÒ»¸öView²ã¼Ü¹¹£¬Ö÷Òª¾ÍÊÇ´ÓÒÔÏÂÈý·½ÃæÈëÊÖ£º
- ÖÆ¶¨Á¼ºÃµÄ¹æ·¶
- Ñ¡ÔñºÃºÏÊʵÄģʽ£¨MVC¡¢MVCS¡¢MVVM¡¢VIPER£©
- ¸ù¾ÝÒµÎñÇé¿öÕë¶ÔViewController×öºÃ²ð·Ö£¬ÌṩһЩС¹¤¾ß·½±ã¿ª·¢
µ±È»£¬Ä㻹»áÓöµ½ÆäËûµÄºÜ¶àÎÊÌ⣬ÕâʱºòÄã¿ÉÒԲο¼ÕâÆªÎÄÕÂÀïÌá³öµÄÐÄ·¨£¬ÔÚºóÃæÌáµ½µÄ¿çÒµÎñÒ³Ãæµ÷Ó÷½°¸µÄÉè¼ÆÖУ¬ÄãÒ²Äܹ»¿´µ½ÎÒµÄһЩÐÄ·¨µÄÓ°×Ó¡£
¶ÔÓÚiOS¿Í»§¶ËÀ´Ëµ£¬Ëü²¢²»ÏñÆäËûÓïÑÔÖîÈçPython¡¢PHPËûÃÇÓÐÄÇô¶àµÄ·Ç¹Ù·½Í¨Óÿò¼Ü¡£¿Í¹ÛÔÒòÔÚÓÚ£¬Æ»¹ûÒѾΪÎÒÃÇ×öÁ˷dz£¶àµÄÊÂÇ飬×öÁ˺ܶàµÄŬÁ¦¡£ÔÚÆ»¹ûÒѾ×öÁËÕâô¶àÊÂÇéµÄ»ù´¡ÉÏ£¬¼Ü¹¹Ê¦Òª×öÕë¶ÔView²ãµÄ·½°¸Ê±£¬×îºÃ»¹ÊǾ¡Á¿×ñÊØÆ»¹ûÒÑÓеĹ淶ºÍÉè¼ÆË¼Ï룬Ȼºó¸ù¾Ý×Ô¼º¹ýÈ¥¿ª·¢iOSʱµÄ¾Ñ飬¾¡¿ÉÄܸøÒµÎñ·½ÔÚ¿ª·¢ÒµÎñʱ¼õ¸º£¬Ìá¸ßÒµÎñ´úÂëµÄ¿Éά»¤ÐÔ£¬¾ÍÊÇView²ã¼Ü¹¹·½°¸µÄ×î´óÄ¿±ê¡£
2015-04-28 09:28²¹£º¹ØÓÚAOP
AOP£¨Aspect Oriented Programming£©£¬ÃæÏòÇÐÆ¬±à³Ì£¬ÕâÒ²ÊÇÃæÏòXX±à³ÌϵÁÐÊõÓïÖ®Ò»¹þ£¬µ«Ëü¸úÎÒÃÇÊìÖªµÄÃæÏò¶ÔÏó±à³Ìûʲô¹ØÏµ¡£
ʲôÊÇÇÐÆ¬£¿
³ÌÐòÒªÍê³ÉÒ»¼þÊÂÇ飬һ¶¨»áÓÐһЩ²½Ö裬1£¬2£¬3£¬4ÕâÑù¡£ÕâÀï·Ö½â³öÀ´µÄÿһ¸ö²½ÖèÎÒÃÇ¿ÉÒÔÈÏΪÊÇÒ»¸öÇÐÆ¬¡£
ʲôÊÇÃæÏòÇÐÆ¬±à³Ì£¿
ÄãÕë¶Ôÿһ¸öÇÐÆ¬µÄ¼ä϶£¬ÈûһЩ´úÂë½øÈ¥£¬ÔÚ³ÌÐòÕý³£½øÐÐ1£¬2£¬3£¬4²½µÄ¼ä϶¿ÉÒÔÅܵ½ÄãÈû½øÈ¥µÄ´úÂ룬ÄÇôÄãдÕâЩ´úÂë¾ÍÊÇÃæÏòÇÐÆ¬±à³Ì¡£
Ϊʲô»á³öÏÖÃæÏòÇÐÆ¬±à³Ì£¿
ÄãÒªÏë×öµ½ÔÚÿһ¸ö²½ÖèÖмä×öÄã×Ô¼ºµÄÊÂÇ飬²»ÓÃAOPÒ²Ò»Ñù¿ÉÒԴﵽĿµÄ£¬Ö±½ÓÍù²½ÖèÖ®¼äÈû´úÂë¾ÍºÃÁË¡£µ«ÊÇÊÂʵÇé¿öÍùÍùºÜ¸´ÔÓ£¬Ö±½Ó°Ñ´úÂëÈû½øÈ¥£¬Ö÷ÒªÎÊÌâ¾ÍÔÚÓÚ£ºÈû½øÈ¥µÄ´úÂëºÜÓпÉÄÜÊǸúÔÒµÎñÎ޹صĴúÂ룬ÔÚͬһ·Ý´úÂëÎļþÀïÃæ²ôÔÓ¶àÖÖÒµÎñ£¬Õâ»á´øÀ´ÒµÎñ¼äñîºÏ¡£ÎªÁ˽µµÍÕâÖÖñîºÏ¶È£¬ÎÒÃÇÒýÈëÁËAOP¡£
ÈçºÎʵÏÖAOP£¿
AOPÒ»°ã¶¼ÊÇÐèÒªÓÐÒ»¸öÀ¹½ØÆ÷£¬È»ºóÔÚÿһ¸öÇÐÆ¬ÔËÐÐ֮ǰºÍÔËÐÐÖ®ºó£¨»òÕßÈκÎÄãÏ£ÍûµÄµØ·½£©£¬Í¨¹ýµ÷ÓÃÀ¹½ØÆ÷µÄ·½·¨À´°ÑÕâ¸öjointpointÈÓµ½ÍâÃæ£¬ÔÚÍâÃæ»ñµÃÕâ¸öjointpointµÄʱºò£¬Ö´ÐÐÏàÓ¦µÄ´úÂë¡£
ÔÚiOS¿ª·¢ÁìÓò£¬objective-CµÄruntimeÓÐÌṩÁËһϵÁеķ½·¨£¬Äܹ»ÈÃÎÒÃÇÀ¹½Øµ½Ä³¸ö·½·¨µÄµ÷Óã¬À´ÊµÏÖÀ¹½ØÆ÷µÄ¹¦ÄÜ£¬ÕâÖÖÊÖ¶ÎÎÒÃdzÆÎªMethod Swizzling¡£Aspectsͨ¹ýÕâ¸öÊÖ¶ÎʵÏÖÁËÕë¶Ôij¸öÀàºÍij¸öʵÀýÖз½·¨µÄÀ¹½Ø¡£
ÁíÍ⣬Ҳ¿ÉÒÔʹÓÃprotocolµÄ·½Ê½À´ÊµÏÖÀ¹½ØÆ÷µÄ¹¦ÄÜ£¬¾ßÌåʵÏÖ·½°¸¾ÍÊÇÕâÑù£º
@protocol RTAPIManagerInterceptor <NSObject>
@optional
- (void)manager:(RTAPIBaseManager *)manager beforePerformSuccessWithResponse:(AIFURLResponse *)response;
- (void)manager:(RTAPIBaseManager *)manager afterPerformSuccessWithResponse:(AIFURLResponse *)response;
- (void)manager:(RTAPIBaseManager *)manager beforePerformFailWithResponse:(AIFURLResponse *)response;
- (void)manager:(RTAPIBaseManager *)manager afterPerformFailWithResponse:(AIFURLResponse *)response;
- (BOOL)manager:(RTAPIBaseManager *)manager shouldCallAPIWithParams:(NSDictionary *)params;
- (void)manager:(RTAPIBaseManager *)manager afterCallingAPIWithParams:(NSDictionary *)params;
@end
@interface RTAPIBaseManager : NSObject
@property (nonatomic, weak) id<RTAPIManagerInterceptor> interceptor;
@end |
Õâô×ö¶Ô±ÈMethod SwizzlingÓиö¶îÍâºÃ´¦¾ÍÊÇ£¬Äã¿ÉÒÔͨ¹ýÀ¹½ØÆ÷À´¸øÀ¹½ØÆ÷µÄʵÏÖÕßÌṩ¸ü¶àµÄÐÅÏ¢£¬±ãÓÚÍⲿʵÏÖ¸ü¼ÓÁ˽⵱ǰÇÐÆ¬µÄÇé¿ö¡£ÁíÍ⣬Ä㻹¿ÉÒÔ¸ü¾«Ï¸µØ¶ÔÇÐÆ¬½øÐл®·Ö¡£Method SwizzlingµÄÇÐÆ¬Á£¶ÈÊǺ¯ÊýÁ£¶ÈµÄ£¬×Ô¼ºÊµÏÖµÄÀ¹½ØÆ÷µÄÇÐÆ¬Á£¶È¿ÉÒԱȺ¯Êý¸üС£¬¸ü¼Ó¾«Ï¸¡£
ȱµã¾ÍÊÇ£¬ÄãµÃ×Ô¼ºÔÚÿһ¸ö²åÈëµã°Ñµ÷ÓÃÀ¹½ØÆ÷·½·¨µÄ´úÂëдÉÏ£¨Ð¦£©£¬Í¨¹ýAspects£¨±¾ÖÊÉϾÍÊÇMehtod Swizzling£©À´ÊµÏÖµÄAOP£¬¾ÍÄÜÇáËÉһЩ¡£
2015-4-29 14:25 ²¹£º¹ØÓÚÔÚÄĶùдConstraints£¿
ÎÄÕ·¢³öÀ´Ö®ºó£¬ºÜ¶àÈËÕë¶Ô¿±Îó1Óкܶ࿴·¨£¬ÒÔÖÁÓÚÎÒ¾õµÃºÜÓбØÒªÔÚÕâÀï×öÒ»·Ý²¹¡£ÆÚ¼ä¹ý³ÌºÜ¶àºÜ¸´ÔÓ£¬ÕâÆªÎÄÕÂÒ²ÒѾºÜ³¤ÁË£¬ÎÒ¾ÍÖ±½Ó˵½á¹ûÁ˹þ¡£

Æ»¹ûÔÚÎĵµÖÐÖ¸³ö£¬updateViewConstraintsÊÇÓÃÀ´×öadd constraintsµÄµØ·½¡£
µ«ÊÇÔÚÕâÀïÓÐÒ»¸ö»Ø´ðÕß˵updateViewConstraints²¢²»ÊʺÏ×öÌí¼ÓConstraintsµÄÊÂÇé¡£
×ÛºÏÎÒ×Ô¼ººÍÆÀÂÛÇø¸÷λ¹ØÐÄÕâ¸öÎÊÌâµÄÐÖµÜÃǵĸ÷ÖÖ²âÊԺ͸÷ÖÖÎĵµ£¬ÎÒÏÖÔÚ¾õµÃ»¹ÊÇÔÚviewDidLoadÀïÃæ¿ªÒ»¸ölayoutPageSubviewsµÄ·½·¨£¬È»ºóÔÚÕâ¸öÀïÃæ´´½¨Constraints²¢Ìí¼Ó£¬»á±È½ÏºÃ¡£¾ÍÊÇÏñÏÂÃæÕâÑù£º
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:self.firstView];
[self.view addSubview:self.secondView];
[self.view addSubview:self.thirdView];
[self layoutPageSubviews];
}
- (void)layoutPageSubviews
{
[self.view addConstraints:xxxConstraints];
[self.view addConstraints:yyyConstraints];
[self.view addConstraints:zzzConstraints];
} |
×îºó£¬Òª¸ÐлÆÀÂÛÇø¸÷λ¹ØÐÄÕâ¸öÎÊÌ⣬²¢Ìá³ö×Ô¼ºÒâ¼û£¬ÉõÖÁÊÇ×Ô¼ºÇ××Ô²âÊÔÈ»ºó¸æËßÎÒ½á¹ûµÄ¸÷λÐֵܣº@fly2never£¬@Wythe£¬@wtlucky£¬@lcddhr£¬@ÀîÐÂÐÇ£¬@Meigan Fang£¬@ÄäÃû£¬@Xiao Moch¡£
Õâ¸ö×ö·¨ÊÇĿǰÎÒ×Ô¼º¾õµÃ¿ÉÄܱȽϺÏÊʵÄ×ö·¨£¬µ±È»Ò²»¶ÓÆäËûͬѧ¼ÌÐøÄóö×Ô¼ºµÄ¿´·¨£¬ÎÒÃÇÀ´ÌÖÂÛ¡£
¿±Îó
ÎÒµÄǰͬÊÂ@ddaajing ¿´ÁËÕâÆªÎÄÕÂÖ®ºó£¬¸øÎÒÌá³öÁËÒÔÏÂÁ½¸ö¿±Î󣬺ͺܶàÐÐÎÄÉϵÄÎÊÌâ¡£ÔÚÕâÀïÎÒ¶ÔËû±íʾ·Ç³£¸Ðл£º
¿±Îó1£ºÆäʵÔÚviewWillAppearÕâÀï¸Ä±äUIÔªËØ²»ÊǺܿɿ¿£¬Autolayout·¢ÉúÔÚviewWillAppearÖ®ºó£¬ÑϸñÀ´ËµÕâÀïͨ³£²»×öÊÓͼλÖõÄÐ޸쬶øÓÃÀ´¸üÐÂFormÊý¾Ý¡£¸Ä±äλÖÿÉÒÔ·ÅÔÚviewWilllayoutSubview»òÕßdidLayoutSubviewÀ¶øÇÒÔÚviewDidLayoutSubviewÈ·¶¨UIλÖùØÏµÖ®ºóÉèÖÃautoLayout±È½ÏÎÈÍס£ÁíÍ⣬viewWillAppearÔÚÿ´ÎÒ³Ãæ¼´½«ÏÔʾ¶¼»áµ÷Óã¬viewWillLayoutSubviewsËäÈ»ÔÚlifeCycleÀïµ÷ÓÃ˳ÐòÔÚviewWillAppearÖ®ºó£¬µ«ÊÇÖ»ÓÐÔÚÒ³ÃæÔªËØÐèÒªµ÷Õûʱ²Å»áµ÷Ó㬱ÜÃâÁËConstraintsµÄÖØ¸´Ìí¼Ó¡£
¿±Îó2£ºMVVMÒªÓÐViewModel£¬ÒÔ¼°ReactiveCocoa´øÀ´µÄÐźÅ֪ͨЧ¹û£¬ÔÚReactiveCocoaÀï¾ÍÊÇRACµÈÏà¹ØºêÀ´ÊµÏÖ¡£ÁíÍ⣬ʹÓÃReactiveCocoaÄܹ»±È½ÏÓÅÑŵØÊµÏÖMVVMģʽ£¬¾ÍÊÇÒòΪÓÐRACµÈÏà¹ØºêµÄ´æÔÚ¡£¾ÍÏñËüµÄÃû×ÖÒ»ÑùReactive-ÏìӦʽ£¬ÕâÒ²ÊÇÇø·ÖMVVMµÄVMºÍMVCµÄCºÍMVPµÄPµÄÒ»¸öÖØÒª·½Ãæ¡£ |