Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOSÓ¦Óüܹ¹Ì¸ view²ãµÄ×éÖ¯ºÍµ÷Ó÷½°¸
 
  2526  次浏览      29
 2018-3-9 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcasatwy,ÎÄÕÂÖ÷Òª½²½âµÄÊÇview²ãµÄ×éÖ¯ºÍµ÷Ó÷½°¸¡£

ǰÑÔ

µÚһƪ¡¶iOSÓ¦Óüܹ¹Ì¸ ¿ªÆª¡·

µ±ÎÒÃÇ¿ªÊ¼Éè¼ÆView²ãµÄ¼Ü¹¹Ê±£¬ÍùÍùÊÇÕâ¸öApp»¹Ã»ÓпªÊ¼¿ª·¢£¬»òÕßÕâ¸öAppÒѾ­·¢¹ý¼¸¸ö°æ±¾ÁË£¬È»ºó´ËʱÐèÒª×ö·Ç³£³¹µ×µÄÖØ¹¹¡£

Ò»°ãÒ²¾ÍÊÇÕâÁ½ÖÖʱ»ú»áÈ¥×öView²ã¼Ü¹¹£¬»ùÓÚÕâ¸öʱ»úµÄÌØÊâÐÔ£¬ÎÒÃÇÔÚÕâʱºò±ØÐëÇå³þÈÏʶµ½£ºView²ãµÄ¼Ü¹¹Ò»µ©ÊµÏÖ»ò¶¨ÐÍ£¬ÔÚApp·¢°æºó¿ÉÐ޸ĵÄÓàµØ¾ÍÒѾ­·Ç³£Ö®Ð¡ÁË¡£ÒòΪËü¸úÒµÎñ¹ØÁª×îΪ½ôÃÜ£¬ËùÒÔÄÄÅÂÉÔ΢¶¯Ò»µãµã£¬ËüËùÒý·¢µÄºûµûЧӦ¶¼²»¼ûµÃÊÇÒµÎñ·½Äܹ»holdסµÄ¡£ÕâÑùµÄÇé¿ö£¬¾ÍÒªÇóÎÒÃÇÔÚʵÏÖÕâ¸ö¼Ü¹¹Ê±£¬´úÂë±ØÐëµÃ¸ÄµÃÇڿ죬²»ÄÜ͵ÀÁ¡£Ò²±ØÐë±§×ųä·ÖµÄ×ÔÎÒ»³ÒÉ̬¶È£¬×ö¾ö²ßʱҪÄÃÄóºÃ³ß¶È¡£

View²ãµÄ¼Ü¹¹·Ç³£Ö®ÖØÒª£¬ÔÚÎÒ¿´À´£¬Õⲿ·Ö¼Ü¹¹ÊÇÕâϵÁÐÎÄÕÂÉæ¼°4¸ö·½Ãæ×îÖØÒªµÄÒ»²¿·Ö£¬Ã»ÓÐÖ®Ò»¡£ÎªÊ²Ã´Õâô˵£¿

View²ã¼Ü¹¹ÊÇÓ°ÏìÒµÎñ·½µü´úÖÜÆÚµÄÒòËØÖ®Ò»

²úÆ·¾­Àí²úÉúÐèÇóµÄËÙ¶È»á·Ç³£¿ì£¬ÓÈÆäÊǹ«Ë¾´ËʱÈÔ´¦ÓÚ´´Òµ³õÆÚ£¬ÔÚ¹æÄ£ÉÔ´óµÄ¹«Ë¾ÀïÃæ£¬²úÆ·¾­ÀíҲϲ»¶ÍÚ´ó¿ÓÀ´ÔÚleaderÃæÇ°Ë¢´æÔڸУ¬±ÈÈç°¢Àï¡£Õâ¾Íµ¼ÖÂÒµÎñ¹¤³ÌʦÈÎÎñ·Ç³£·±ÖØ¡£Õý³£Çé¿öÏÂÈòúÆ·¾­Àí¿³ÐèÇóÊDz»Ì«¿ÉÄܵģ¬Òò´Ë×÷Ϊ¼Ü¹¹Ê¦£¬Ôڼܹ¹ÀïÓÐһЩ¿É×ö¿É²»×öµÄÊÂÇ飬×îºÃ»¹ÊÇÄÜ×ö¾Í×öµô£¬²»ÒªÍµÀÁ¡£Õâ¿ÉÒÔ°ïÒµÎñ·½¼õ¸º£¬±àд´úÂëµÄʱºòÒ²Äܸü¼Ó¹Ø×¢ÒµÎñ¡£

ÎÒ¸úһЩÅóÓѽ»Á÷µÄʱºò£¬ËûÃǶ¼»á»ò¶à»òÉٵر§Ô¹×Ô¼ºµÄÍŶӵü´úËٶȲ»¹»¿ì£¬»òÕß˵£¬µü´úËٶȲ»ºÏÀíµØÂý¡£ÎÒÈÏΪµü´úËٶȲ»ÊÇÏëÌá¾ÍÄÜÌáµÄ£¬µü´úËٶȵÄÓ°ÏìÒòËØÓкܶ࣬һÆÚPRDÀïµÄÈÎÎñÁ¿ºÍÈÎÎñ¸´ÔӶȶ¼»áÓ°Ïìµü´úÖÜÆÚÄܴﵽʲôÑùµÄ³Ì¶È¡£Å׿ªÕâЩÍâÔڵIJ»Ì¸£¬´ÓÄÚÔÚ¿ÉÄܵ¼Öµü´úÖÜÆÚ´ï²»µ½ºÏÀíµÄËٶȵÄÔ­ÒòÀ´¿´£¬ÆäÖÐÓÐÒ»¸öÔ­ÒòºÜÓпÉÄܾÍÊÇView²ã¼Ü¹¹Ã»ÓÐ×öºÃ£¬ÈÃÒµÎñ¹¤³ÌʦÍê³ÉÒ»¸ö²»Ë㸴ÔÓµÄÐèÇóʱ£¬ÐèÒª´¦ÀíÌ«¶à¶îÍâµÄÊÂÇé¡£µ±È»£¬¿ª»á¶à£¬¹¤³ÌʦˮƽÀÃÒ²ÊôÓÚµü´úËÙ¶ÈÌá²»ÉÏÈ¥µÄÄÚ²¿Ô­Òò£¬µ«Õâ¸ö²»ÊôÓÚ±¾ÎÄÌÖÂÛ·¶Î§¡£»¹ÓУ¬¼Ó°à²»ÊÇÓÅ»¯µü´úÖÜÆÚµÄÕýÈ··½Ê½£¬àÅ¡£

Ò»°ãÀ´Ëµ£¬Ò»¸ö²»¹»ºÃµÄView²ã¼Ü¹¹£¬Ö÷ÒªÔ­ÒòÓÐÒÔÏÂÎåÖÖ£º

  1. ´úÂë»ìÂÒ²»¹æ·¶
  2. ¹ý¶à¼Ì³Ðµ¼Öµĸ´ÔÓÒÀÀµ¹ØÏµ
  3. Ä£¿é»¯³Ì¶È²»¹»¸ß£¬×é¼þÁ£¶È²»¹»Ï¸
  4. ºáÏòÒÀÀµ
  5. ¼Ü¹¹Éè¼ÆÊ§È¥´«³Ð

ÕâÎå¸öµØ·½»áÓ°ÏìÒµÎñ¹¤³ÌʦʵÏÖÐèÇóµÄЧÂÊ£¬½ø¶øÍÏÂýµü´úÖÜÆÚ¡£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²ã¹æ·¶µÄÖØÒªÐÔÔÚÓÚ£º

  1. Ìá¸ßÒµÎñ·½View²ãµÄ¿É¶ÁÐÔ¿Éά»¤ÐÔ
  2. ·ÀÖ¹ÒµÎñ´úÂë¶Ô¼Ü¹¹²úÉú¸¯Ê´
  3. È·±£´«³Ð
  4. ±£³Ö¼Ü¹¹·¢Õ¹µÄ·½Ïò²»ÇáÒ×±»²»ºÏÀíµÄÒâ¼ûËù×óÓÒ

ÔÚÕâÒ»½ÚÀïÃæÎÒ²»´òËã´ÓÍ·¿ªÊ¼¶¨ÒåÒ»Ì׹淶£¬Æ»¹ûÓÐÒ»Ì×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ÈËÒÔÉÏ£©ÓÐÒÔϼ¸¸öÌØµã£º

  1. ͬһ·Ý´úÂëÎļþµÄ×÷Õß»áÓкܶ࣬²»Í¬×÷ÕßͬʱÐÞ¸Äͬһ·Ý´úÂëµÄÇé¿öÒ²²»ÉÙ¼û¡£Òò´Ë£¬Ê¹ÓÃGit½øÐдúÂë°æ±¾¹ÜÀíʱ³öÏÖConflictµÄ¼¸ÂÊÒ²±È½Ï´ó¡£
  2. ÐèÇó±ä»¯·Ç³£Æµ·±£¬²úÆ·¾­Àíһʱһ¸öÖ÷Ò⣬ΪÁËÍê³ÉÐèÇó¶øÕë¶ÔÏÖÓдúÂë½øÐÐ΢µ÷µÄÇé¿ö£¬ÒÔ¼°Õë¶ÔÏÖÓдúÂëµÄ²¿·Ö¸´ÓõÄÇé¿öÒ²±È½Ï¶à¡£
  3. ¸´ÔÓ½çÃæÔªËØ¡¢¸´ÔÓ¶¯»­³¡¾°µÄ¿ª·¢ÈÎÎñ±È½Ï¶à¡£

Èç¹ûÕâÈý¸öÌØµãÄãÒ»¿´¾ÍÃ÷°×ÁË£¬ÏÂÃæµÄ½âÊ;ͿÉÒÔ²»Óÿ´ÁË¡£Èç¹ûÄãÕë¶ÔÎÒµÄÇãÏòÔ¸Òâ½øÒ»²½ÌÖÂ۵ģ¬¿ÉÒÔÏÈ¿´ÎÒÏÂÃæµÄ½âÊÍ£¬¿´ÍêÔÙ˵¡£

ͬһ·Ý´úÂëÎļþµÄ×÷Õß»áÓкܶ࣬²»Í¬×÷ÕßͬʱÐÞ¸Äͬһ·Ý´úÂëµÄÇé¿öÒ²²»ÉÙ¼û¡£Òò´Ë£¬Ê¹ÓÃ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¼Ü¹¹Ê±£¬Èç¹ûΪÁËÄܹ»´ïµ½Í³Ò»ÉèÖûòÖ´ÐÐͳһÂß¼­µÄÄ¿µÄ£¬Ê¹ÓÃÅÉÉúµÄÊÖ¶ÎÊÇÓбØÒªµÄÂð£¿

ÎÒ¾õµÃûÓбØÒª£¬ÎªÊ²Ã´Ã»ÓбØÒª£¿

  1. ʹÓÃÅÉÉú±È²»Ê¹ÓÃÅÉÉú¸üÈÝÒ×Ôö¼ÓÒµÎñ·½µÄʹÓóɱ¾
  2. ²»Ê¹ÓÃÅÉÉúÊÖ¶ÎÒ»ÑùÒ²ÄܴﵽͳһÉèÖõÄÄ¿µÄ

ÕâÁ½ÌõÔ­ÒòÊÇÎÒÈÏΪûÓбØÒªÊ¹ÓÃÅÉÉúÊֶεÄÀíÓÉ£¬Èç¹ûÁ½ÌõÀíÓÉÄã¶¼ÐÄÁìÉñ»á£¬ÄÇôÏÂÃæµÄ¾Í¿ÉÒÔ²»Óÿ´ÁË¡£Èç¹ûÄ㻹ÓеãÒÉ»ó£¬Çë¿´ÏÂÃæÎÒÀ´Ïêϸ½²Ò»ÏÂÔ­Òò¡£

ΪʲôʹÓÃÁËÅÉÉú£¬ÒµÎñ·½µÄʹÓóɱ¾»áÌáÉý£¿

Æäʵ²»¹âÊÇÒµÎñ·½µÄʹÓóɱ¾£¬¼Ü¹¹µÄά»¤³É±¾Ò²»áÉÏÉý¡£ÄÇô¾ßÌåµÄ³É±¾¶¼À´×ÔÓÚÄÄÀïÄØ£¿

  • ¼¯³É³É±¾

ÕâÀï½²µÄ¼¯³É³É±¾ÊÇÕâÑùµÄ£ºÈç¹ûÒµÎñ·½×Ô¼º¿ªÁËÒ»¸ö¶ÀÁ¢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¡£

Ôڼܹ¹Ê¦ÊµÏÖ¾ßÌåµÄ·½°¸Ö®Ç°£¬±ØÐëÒªÏëÇå³þ¼¸¸öÎÊÌ⣬Ȼºó²ÅÄܾö¶¨²ÉÓÃÄÄÖÖ·½°¸¡£ÊÇÄöÎÊÌ⣿

  1. ·½°¸µÄЧ¹û£¬ºÍ×îÖÕÒª´ïµ½µÄÄ¿µÄÊÇʲô£¿
  2. ÔÚ×Ô¼ºµÄ֪ʶÌåϵÀïÃæ£¬ÊÇ·ñ¾ß±¸ÊµÏÖÕâ¸ö·½°¸µÄÄÜÁ¦£¿
  3. ÔÚÒµ½çÒÑÓеĿªÔ´×é¼þÀïÃæ£¬ÊÇ·ñÓпÉÒÔÖ±½ÓÄÃÀ´ÓõÄÂÖ×Ó£¿

ÕâÈý¸öÎÊÌâ°´ÕÕ˳ÐòÒ»Ò»½â´ðÖ®ºó£¬¾ßÌå·½°¸¾ÍÄܳöÀ´ÁË¡£

ÎÒÃÇÏÈ¿´µÚÒ»¸öÎÊÌ⣺·½°¸µÄЧ¹û£¬ºÍ×îÖÕÒª´ïµ½µÄÄ¿µÄÊÇʲô£¿

·½°¸µÄЧ¹ûÓ¦¸ÃÊÇ£º

  1. ÒµÎñ·½¿ÉÒÔ²»ÓÃͨ¹ý¼Ì³ÐµÄ·½·¨£¬È»ºó¿ò¼ÜÄܹ»×öµ½¶ÔViewControllerµÄͳһÅäÖá£
  2. ÒµÎñ·½¼´Ê¹ÍÑÀë¿ò¼Ü»·¾³£¬²»ÐèÒªÐÞ¸ÄÈκδúÂëÒ²Äܹ»ÅÜÍê´úÂë¡£ÒµÎñ·½µÄ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µÄ»®·Ö£¿

ÕâÀïÃæÆäʵÓÐÁ½¸öÎÊÌ⣺

  1. ΪʲôÎÒÃÇ»á¾À½áÓÚiOS¿ª·¢ÁìÓòÖÐMVCµÄ»®·ÖÎÊÌ⣿
  2. ÔÚ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Ó¦¸Ã×öµÄÊ£º

  1. ¸øViewControllerÌṩÊý¾Ý
  2. ¸øViewController´æ´¢Êý¾ÝÌṩ½Ó¿Ú
  3. Ìṩ¾­¹ý³éÏóµÄÒµÎñ»ù±¾×é¼þ£¬¹©Controllerµ÷¶È

CÓ¦¸Ã×öµÄÊ£º

  1. ¹ÜÀíView ContainerµÄÉúÃüÖÜÆÚ
  2. ¸ºÔðÉú³ÉËùÓеÄViewʵÀý£¬²¢·ÅÈëView Container
  3. ¼àÌýÀ´×ÔViewÓëÒµÎñÓйصÄʼþ£¬Í¨¹ýÓëModelµÄºÏ×÷£¬À´Íê³É¶ÔӦʼþµÄÒµÎñ¡£

VÓ¦¸Ã×öµÄÊ£º

  1. ÏìÓ¦ÓëÒµÎñÎ޹صÄʼþ£¬²¢Òò´ËÒý·¢¶¯»­Ð§¹û£¬µã»÷·´À¡£¨Èç¹ûºÏÊʵϰ£¬¾¡Á¿»¹ÊÇ·ÅÔÚViewÈ¥×ö£©µÈ¡£
  2. ½çÃæÔªËØ±í´ï

ÎÒͨ¹ýÓë·þÎñ¶Ë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°üº¬Á˲¿·ÖÈõÒµÎñÂß¼­¡£ÅÖ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£¿

ÊÝ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ÖлᵼÖºáÏòÒÀÀµ¡£ÄÇôÏñÕâÑùµÄºáÏòÒÀÀµ£¬Èç¹û²»È¥Éè·¨½â¾ö£¬»áµ¼ÖÂʲôÑùµÄ½á¹û£¿

  1. µ±Ò»¸öÐèÇóÐèÒª¶àÒµÎñºÏ×÷¿ª·¢Ê±£¬Èç¹ûÖ±½ÓÒÀÀµ£¬»áµ¼ÖÂijЩÒÀÀµ²ãÉ϶˵ÄÒµÎñ¹¤³ÌʦÔÚǰÆÚ¿Õת£¬ÒÀÀµ²ã϶˵Ť³ÌʦÈÎÎñ·±ÖØ£¬¶øÕû¸öÐèÇóÍê³ÉµÄËÙ¶È»á±äÂý£¬Ó°ÏìµÄÊÇÍŶӿª·¢µü´úËÙ¶È¡£
  2. µ±Òª¿ª±ÙÒ»¸öÐÂÒµÎñʱ£¬Èç¹ûÒÑÓи÷ÒµÎñ¼äÖ±½ÓÒÀÀµ£¬ÐÂÒµÎñÓÖÒÀÀµÄ³¸ö¾ÉÒµÎñ£¬¾Íµ¼ÖÂÐÂÒµÎñµÄ¿ª·¢»·¾³´î½¨À§ÄÑ£¬ÒòΪ±ØÐëÒª°ÑËùÓÐÏà¹ØÒµÎñ¶¼ÈûÈ뿪·¢»·¾³£¬ÐÂÒµÎñ²ÅÄܽøÐпª·¢¡£Ó°ÏìµÄÊÇÐÂÒµÎñµÄÏìÓ¦ËÙ¶È¡£
  3. µ±Ä³Ò»¸ö±»ÆäËûÒµÎñÒÀÀµµÄÒ³ÃæÓÐËùÐÞ¸Äʱ£¬±ÈÈç¸ÄÃû£¬Éæ¼°µ½µÄÐÞ¸ÄÃæ¾Í»áÌØ±ð´ó¡£Ó°ÏìµÄÊÇÔì³ÉÈÎÎñÁ¿ºÍά»¤³É±¾¶¼ÉÏÉýµÄ½á¹û¡£

µ±È»£¬Èç¹ûApp¹æÄ£ÌرðС£¬ÕâÈýµã´øÀ´µÄÓ°ÏìÒ²»áÌØ±ðС£¬µ«ÊÇÔÚ°¢ÀïÕâÑù´ó¹æÄ£µÄÍŶÓÖУ¬ÏñÌì裯ÌÔ±¦ÕâÑù´ó¹æÄ£µÄApp£¬Ò»µ©ÓöÉÏÕâÀïÃæÄÄÅÂÆäÖÐÒ»¼þÊÂÇ飬¾ÍÌØÃ´ºÜ¿Óµù¡£

ÄÇôӦ¸ÃÔõÑù´¦ÀíÕâ¸öÎÊÌ⣿

ÈÃÒÀÀµ¹ØÏµÏ³Á¡£

ÔõôÈÃÒÀÀµ¹ØÏµÏ³Á£¿ÒýÈëMediatorģʽ¡£

ËùνÒýÈëMediatorģʽÀ´ÈÃÒÀÀµ¹ØÏµÏ³Á£¬ÊµÖÊÉϾÍÊÇÿ´Îºô»½Ò³ÃæµÄʱºò£¬Í¨¹ýÒ»¸öÖмäÈËÀ´ÕÙ»½ÁíÍâÒ»¸öÒ³Ãæ£¬ÕâÑùֻҪÿ¸öÒµÎñÒÀÀµÕâ¸öÖмäÈ˾ͿÉÒÔÁË£¬ÖмäÈ˵ĽÇÉ«¾Í¿ÉÒÔ·ÅÔÚÒµÎñ²ãµÄÏÂÃæÒ»²ã£¬Õâ¾ÍÊÇÒÀÀµ¹ØÏµÏ³Á¡£

µ±AÒµÎñÐèÒªµ÷ÓÃBÒµÎñµÄij¸öÒ³ÃæµÄʱºò£¬½«ÇëÇ󽻸øMediater£¬È»ºóÓÉMediaterͨ¹ýijÖÖÊֶλñÈ¡µ½BÒµÎñÒ³ÃæµÄʵÀý£¬½»»¹¸øA¾ÍÐÐÁË¡£ÔÚ¾ßÌåʵÏÖÕâ¸ö»úÖÆµÄ¹ý³ÌÖУ¬ÓÐÒÔϼ¸¸öÎÊÌâÐèÒª½â¾ö£º

  1. Éè¼ÆÒ»Ì×ͨÓõÄÇëÇó»úÖÆ£¬ÇëÇó»úÖÆÐèÒª¸úÒµÎñ°þÀ룬ʹµÃ²»Í¬ÒµÎñµÄÒ³ÃæÇëÇó¶¼Äܹ»±»Mediater´¦Àí
  2. Éè¼Æ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²ã¼Ü¹¹£¬Ö÷Òª¾ÍÊÇ´ÓÒÔÏÂÈý·½ÃæÈëÊÖ£º

  1. ÖÆ¶¨Á¼ºÃµÄ¹æ·¶
  2. Ñ¡ÔñºÃºÏÊʵÄģʽ£¨MVC¡¢MVCS¡¢MVVM¡¢VIPER£©
  3. ¸ù¾ÝÒµÎñÇé¿öÕë¶Ô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µÄÒ»¸öÖØÒª·½Ãæ¡£

   
2526 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì