²»Íü³õÐÄ
ÔÚ¹ýÈ¥¼¸Äê¼ä£¬Òƶ¯Ó¦ÓÃÒÔÀ×öªÖ®ÊÆÏ¯¾íÈ«Çò¡£ÎÒÃÇÔÚ¹¤×÷ºÍÐÝÏÐʱ¼äÖÐʹÓû¥ÁªÍøµÄ·½Ê½£¬ÒÑ¾Ëæ×ÅÒÆ¶¯Ó¦ÓõÄǰ½ø½Å²½·¢ÉúÁ˱ä¸ï¡£ÔÚ¿ª·¢Ó¦ÓõÄʱºò£¬ÈËÃÇÒ²¿ªÊ¼¿¼ÂÇ¡°Òƶ¯ÓÅÏÈ¡±µÄ×ö·¨¡£ÎÒÃÇÕýÔÚÃæ¶ÔÈ«ÐÂÒ»´úµÄÒÆ¶¯É豸£¬ÖîÈç¿É´©´÷É豸»òÖÚ¶àÒÆ¶¯Åä¼þ¡ª¡ªÕýÊÇËüÃǹ¹³ÉÁË¡°ÍòÎﻥÁª¡±µÄÊÀ½ç¡£ÎÒÃǽ«Ãæ¶ÔȫеÄÓû§½çÃæ£¬Í¨¹ýËüÃÇÊý¾Ýչʾ¼°Ö¸Áî½ÓÊÕ´¦Àí¡£Í¬Ê±£¬ÎÒÃÇ»¹½«¿´µ½£¬Ô½À´Ô½¶àµÄ¹«Ë¾½«ÕæÕýµØ¼ùÐС°Òƶ¯ÓÅÏÈ¡±µÄ˼·¡£¶øÔÚδÀ´ÊýÄêÖУ¬ÕâÒ»Çж¼½«Ó°ÏìÎÒÃÇÉè¼Æ¡¢¿ª·¢ºÍ²âÊÔÈí¼þµÄ·½Ê½¡£
°ÑÒ»¸ö¿Í»§¶Ë×öµÃÎȶ¨¡¢ÎÞ±¼À£¡¢Á÷³©£¬ÊÇд¿Í»§¶ËÅóÓѵÄÃÎÏ룬µ«ÊÇ£¬ÎÒÃÇÃæÁٵĽá¹ûÍùÍùÊDz»ÈçÈËÒâµÄ¡£ÌìÏÂÎ书£¬Î¨¿ì²»ÆÆ¡£ºÜ¶à¹«Ë¾¶¼ÐÅ·îÕâ¸ö½ÌÌõ¡£ºÞ²»µÃ°Ñapp¿ª·¢ÖÜÆÚѹËõµ½×îµÍ,Õâ¾Íµ¼ÖÂÁË¿ª·¢ÖÐÒþ²ØÁ˺ܶàÎÊÌâ¡£Óеã¾ÑéµÄ¹¤³Ìʦ²ÝÂʵÄÓÅ»¯Ò»ÏÂ,¸üÔãµÄÇé¿öÊÇÄÇЩûÓоÑéµÄ¹¤³ÌʦÉõÖÁ²»»á¶Ôapp½øÐÐÈκÎÓÅ»¯£¬Õ⽫»áʹÇé¿ö±äµÄ¸üÔã¡£
Ê®Äêǰ,ÒÆ¶¯É豸µÄÓ²¼þ×ÊÔ´ÊǷdz£ÓÐÏÞµÄ.ÉõÖÁÁ¬¸¡µãÊý¶¼ÊDZ»½ûÖ¹µÄ.ÒòΪ¸¡µãÊýÄܵ¼Ö¼ÆËãµÄËٶȱäÂý¡£¿Æ¼¼·¢Õ¹Èç´ËѸËٵĽñÌì,Ó²¼þºÜ´ó³Ì¶ÈÉÏ¿ÉÒÔÃÖ²¹Èí¼þµÄ¶Ì°å¡£µ«ÊÇÓ²¼þµÄ½ø²½ÖÕ¾¿ÎÞ·¨ÑÚÊÎÈí¼þµÄ²»×㣬ÕâÒ²ÊÇдÕâÆªÎÄÕµijõÐÄ¡£
ÒÆ¶¯¶Ë¹Ø×¢Òªµã
ÔÚ³ÌÐò¿ª·¢ÖУ¬²âÊÔÊDZز»¿ÉÉٵġ£Òƶ¯¶Ë²âÊÔ°´´óµÄÀàÐÍ»®·Ö¿ÉÒÔ·ÖΪ°×ºÐ²âÊԺͺںвâÊÔ¡£
°×ºÐ²âÊÔÒ»°ãÊÇÓÉ¿ª·¢ÈËԱʹÓñàÂëµÄ·½Ê½½øÐС£²âÊÔÕßÐèÒª½Ó´¥³ÌÐòµÄÄÚ²¿´úÂ룻¶øºÚºÐ²âÊÔ¿ÉÒÔÔÚ²»ÖªµÀ³ÌÐòÄÚ²¿½á¹¹ºÍ´úÂëµÄÇé¿öϽøÐС£
ÏÂÃæÊÇÖ÷ÒªµÄ²âÊÔÁ÷³ÌÁË£º
ðÑ̲âÊÔ£ºÔÚÈí¼þ²âÊÔÖУ¬Ã°Ñ̲âÊÔÊÇÖ¸¿ìËÙÑéÖ¤APPµÄÖ÷Òª¹¦ÄÜ£¨ÀýÈ磺΢Ðŵĵǽ¡¢Í˳ö¡¢·¢ÏûÏ¢µÈ¹¦ÄÜ£© ¡£Èç¹ûûÓз¢ÏÖÎÊÌ⣬ÔÙ½øÐиü¼ÓÉîÈëµÄ²âÊÔ¹¤×÷£»Èç¹û·¢ÏÖÓÐÎÊÌ⣬¾Í˵Ã÷APPÓÐÖØ´óȱÏÝ¡£
¹¦ÄܲâÊÔ£º¹¦ÄܲâÊÔÒ²½ÐÐÐΪ²âÊÔ£¬ÐèÒª¸ù¾Ý²âÊÔÓÃÀýÀ´ÑéÖ¤Ó¦ÓÃÔ¤ÆÚµÄ¹¦ÄÜÓÐûÓÐʵÏÖ¡£
×ÔÓÉ̽Ë÷ʽ²âÊÔ£º³¢ÊԱ߽çÌõ¼þ¡¢ÊäÈëÌØÊâ·ûºÅ¡¢Òì³£ÍøÂç»·¾³¡¢Í»È»ÖжϳÌÐòµÈ²Ù×÷ ¡£¹¦ÄܲâÊÔµÄÄ¿µÄÊÇÑéÖ¤Õý³£µÄ¹¦ÄÜÓÐûÓÐʵÏÖ£¬¶ø×ÔÓÉ̽Ë÷²âÊÔµÄÄ¿µÄ¾ÍÊÇΪÁËÊÔÊÔÓ¦ÓÃÔÚ¼«¶ËµÄ²Ù×÷Ï»᲻»á³öÏÖÎÊÌ⡣̽Ë÷ʽ²âÊÔ¾ÍÊÇÒªÕÒµ½ÄÜÈÃÓ¦Óóö´íµÄ²Ù×÷¡£
»Ø¹é²âÊÔ£º¶Ô֮ǰʹÓÃÎÒÃǵķþÎñ²âÊÔ¹ýµÄÓ¦Ó㬽«°¸Àý¸´²âÒ»±é¡£
ÒÆ¶¯¶Ë¹Ø×¢µÄһЩָ±ê
ÔËÐжàÉÙСʱ²»±ÀÀ££»
¶à´Î´ò¿ªÒ³Ã棬¿ØÖƱÀÀ£ÂÊ£»
½çÃæÓÅ»¯£¬ÈçºÎ²ÅÄÜÈÃÓû§²»¼±Ôê¡¢²»·³Ôꣻ
·þÎñÆ÷ûÓзµ»ØÊý¾Ý£¬ÊÇ·ñ»áµ¼Ö±¼À££»
ÍøÂç²»ºÃ£¬Êý¾ÝÀ´µÄÌ«Âý£¬½çÃæÊÇ·ñ²»Á÷³©£»
´ÓÊý¾Ý¿â¶ÁµÄÊý¾ÝÌ«ÂýÈçºÎ½â¾öµÈ¡£
ÒÆ¶¯¶Ë½çÃæÓ¦¸ÃÓÐ×Ô¼ºµÄÂß¼£¬ÐèÒªÍøÂçÊý¾ÝµÄµØ·½£¬Ó¦¸ÃÓÐĬÈÏÖµ£¬ÕâÑùÔÚÍøÂçÊý¾ÝûÓзµ»ØµÄÇé¿öÏ£¬ÈÃÓû§ÓÐÊý¾Ý¿ÉÒÔ¿´µ½¡£ÊÕµ½µÄÍøÂçÊý¾ÝÓ¦¸ÃÊÇͨ¹ýijÖÖ·½Ê½Ë¢Ðµ½½çÃæ£¬¶ø²»Êǵȵ½Êý¾Ý·µ»Ø²ÅË¢ÐÂÒ³Ãæ¡£µ±Ã»ÓÐÍøÂçÊý¾ÝµÄʱºò£¬½çÃæÓ¦¸Ã¿ÉÒÔ×Ô³ÉÒ»Ì壬×ßµÄͨÁ÷³Ì£¬²»Ç¿ÒÀÀµÍøÂçÊý¾Ý¡£
ÔÚÈõÍøÄ£Ê½Ïµ÷ÊÔÊÇÎÒÃDZر¸µÄ¹¦Á¦£¬ÒòΪÎÒÃÇÒª¿¼ÂÇÓû§µÄʵʩ»·¾³Í¨³£¶¼²»»áºÜºÃ¡£°Ñ¾³£Ê¹ÓõÄÊý¾Ý£¬´æµ½»º´æ£¬Ìá¸ßAPPµÄÔËÐÐЧÂÊ¡¢½çÃæÁ÷³Ì¶È¡£Í¬Ê±£¬ÎÒÃÇÐèÒª¾ß±¸ÊÕ¼¯±¼À£ÈÕÖ¾µÄ¹¦ÄÜ£¬ÕâÑù²ÅÄܸüºÃµÄ¼õÉÙ±ÀÀ££¬Ìá¸ßÓû§ÌåÑé¡£
½çÃæ¿¨¶Ù²úÉúµÄÔÒòºÍ½â¾ö·½°¸
iOS½çÃæ´¦ÀíÊÇÔÚÖ÷Ïß³ÌϽøÐеģ¬ÏµÍ³Í¼ÐηþÎñͨ¹ý CADisplayLink µÈ»úÖÆÍ¨Öª App£¬App
Ö÷Ï߳̿ªÊ¼ÔÚ CPU ÖмÆËãÏÔʾÄÚÈÝ£¬±ÈÈçÊÓͼµÄ´´½¨¡¢²¼¾Ö¼ÆË㡢ͼƬ½âÂë¡¢Îı¾»æÖƵȡ£Ëæºó CPU »á½«¼ÆËãºÃµÄÄÚÈÝÌá½»µ½
GPU È¥£¬ÓÉ GPU ½øÐб任¡¢ºÏ³É¡¢äÖȾ¡£Ëæºó GPU »á°ÑäÖȾ½á¹ûÌá½»µ½Ö¡»º³åÇøÈ¥£¬µÈ´ýÏÂÒ»´ÎË¢ÐÂÐźŵ½À´Ê±ÏÔʾµ½ÆÁÄ»ÉÏ¡£ÏÔʾÆ÷ͨ³£ÒԹ̶¨ÆµÂʽøÐÐˢУ¬Èç¹ûÔÚÒ»¸öË¢ÐÂʱ¼äÄÚ£¬CPU
»òÕß GPU ûÓÐÍê³ÉÄÚÈÝÌá½»£¬ÔòÄÇÒ»Ö¡¾Í»á±»¶ªÆú£¬µÈ´ýÏÂÒ»´Î»ú»áÔÙÏÔʾ£¬¶øÕâʱÏÔʾÆÁ»á±£Áô֮ǰµÄÄÚÈݲ»±ä¡£Õâ¾ÍÊǽçÃæ¿¨¶ÙµÄÔÒò¡£CPU ºÍ GPU ²»ÂÛÄĸö×è°ÁËÏÔʾÁ÷³Ì£¬¶¼»áÔì³ÉµôÖ¡ÏÖÏó¡£
CPU ×ÊÔ´ÏûºÄÔÒòºÍ½â¾ö·½°¸
¶ÔÏó´´½¨
¶ÔÏóµÄ´´½¨»á·ÖÅäÄÚ´æ¡¢µ÷ÕûÊôÐÔ¡¢ÉõÖÁ»¹ÓжÁÈ¡ÎļþµÈ²Ù×÷£¬±È½ÏÏûºÄ CPU ×ÊÔ´¡£¾¡Á¿ÓÃÇáÁ¿µÄ¶ÔÏó´úÌæÖØÁ¿µÄ¶ÔÏ󣬿ÉÒÔ¶ÔÐÔÄÜÓÐËùÓÅ»¯¡£±ÈÈç
CALayer ±È UIView ÒªÇáÁ¿Ðí¶à£¬ÄÇô²»ÐèÒªÏìÓ¦´¥ÃþʼþµÄ¿Ø¼þ£¬Óà CALayer ÏÔʾ»á¸ü¼ÓºÏÊÊ¡£Èç¹û¶ÔÏó²»Éæ¼°
UI ²Ù×÷£¬Ôò¾¡Á¿·Åµ½ºǫ́Ïß³ÌÈ¥´´½¨£¬µ«¿ÉϧµÄÊǰüº¬ÓÐ CALayer µÄ¿Ø¼þ£¬¶¼Ö»ÄÜÔÚÖ÷Ï̴߳´½¨ºÍ²Ù×÷¡£Í¨¹ý
Storyboard ´´½¨ÊÓͼ¶ÔÏóʱ£¬Æä×ÊÔ´ÏûºÄ»á±ÈÖ±½Óͨ¹ý´úÂë´´½¨¶ÔÏóÒª´ó·Ç³£¶à£¬ÔÚÐÔÄÜÃô¸ÐµÄ½çÃæÀStoryboard
²¢²»ÊÇÒ»¸öºÃµÄ¼¼ÊõÑ¡Ôñ¡£
¾¡Á¿ÍƳٶÔÏó´´½¨µÄʱ¼ä£¬²¢°Ñ¶ÔÏóµÄ´´½¨·ÖÉ¢µ½¶à¸öÈÎÎñÖÐÈ¥¡£¾¡¹ÜÕâʵÏÖÆðÀ´±È½ÏÂé·³£¬²¢ÇÒ´øÀ´µÄÓÅÊÆ²¢²»¶à£¬µ«Èç¹ûÓÐÄÜÁ¦×ö£¬»¹ÊÇÒª¾¡Á¿³¢ÊÔһϡ£Èç¹û¶ÔÏó¿ÉÒÔ¸´Ó㬲¢ÇÒ¸´ÓõĴú¼Û±ÈÊÍ·Å¡¢´´½¨Ð¶ÔÏóҪС£¬ÄÇôÕâÀà¶ÔÏóÓ¦µ±¾¡Á¿·Åµ½Ò»¸ö»º´æ³ØÀ︴Óá£
¶ÔÏóµ÷Õû
¶ÔÏóµÄµ÷ÕûÒ²¾³£ÊÇÏûºÄ CPU ×ÊÔ´µÄµØ·½¡£ÕâÀïÌØ±ð˵һÏ CALayer£ºCALayer ÄÚ²¿²¢Ã»ÓÐÊôÐÔ£¬µ±µ÷ÓÃÊôÐÔ·½·¨Ê±£¬ËüÄÚ²¿ÊÇͨ¹ýÔËÐÐʱ
resolveInstanceMethod Ϊ¶ÔÏóÁÙʱÌí¼ÓÒ»¸ö·½·¨£¬²¢°Ñ¶ÔÓ¦ÊôÐÔÖµ±£´æµ½ÄÚ²¿µÄÒ»¸ö Dictionary
Àͬʱ»¹»á֪ͨ delegate¡¢´´½¨¶¯»µÈµÈ£¬·Ç³£ÏûºÄ×ÊÔ´¡£UIView µÄ¹ØÓÚÏÔʾÏà¹ØµÄÊôÐÔ£¨±ÈÈç
frame/bounds/transform£©µÈʵ¼ÊÉ϶¼ÊÇ CALayer ÊôÐÔÓ³ÉäÀ´µÄ£¬ËùÒÔ¶Ô UIView
µÄÕâЩÊôÐÔ½øÐе÷Õûʱ£¬ÏûºÄµÄ×ÊÔ´ÒªÔ¶´óÓÚÒ»°ãµÄÊôÐÔ¡£¶Ô´ËÄãÔÚÓ¦ÓÃÖУ¬Ó¦¸Ã¾¡Á¿¼õÉÙ²»±ØÒªµÄÊôÐÔÐ޸ġ£µ±ÊÓͼ²ã´Îµ÷Õûʱ£¬UIView¡¢CALayer
Ö®¼ä»á³öÏֺܶ෽·¨µ÷ÓÃÓë֪ͨ£¬ËùÒÔÔÚÓÅ»¯ÐÔÄÜʱ£¬Ó¦¸Ã¾¡Á¿±ÜÃâµ÷ÕûÊÓͼ²ã´Î¡¢Ìí¼ÓºÍÒÆ³ýÊÓͼ¡£
¶ÔÏóÏú»Ù
¶ÔÏóµÄÏú»ÙËäÈ»ÏûºÄ×ÊÔ´²»¶à£¬µ«ÀÛ»ýÆðÀ´Ò²ÊDz»ÈݺöÊӵġ£Í¨³£µ±ÈÝÆ÷Àà³ÖÓдóÁ¿¶ÔÏóʱ£¬ÆäÏú»ÙʱµÄ×ÊÔ´ÏûºÄ¾Í·Ç³£Ã÷ÏÔ¡£Í¬ÑùµÄ£¬Èç¹û¶ÔÏó¿ÉÒԷŵ½ºǫ́Ïß³ÌÈ¥ÊÍ·Å£¬ÄǾÍŲµ½ºǫ́Ïß³ÌÈ¥¡£ÕâÀïÓиöС
Tip£º°Ñ¶ÔÏó²¶»ñµ½ block ÖУ¬È»ºóÈÓµ½ºǫ́¶ÓÁÐÈ¥Ëæ±ã·¢Ë͸öÏûÏ¢ÒÔ±ÜÃâ±àÒëÆ÷¾¯¸æ£¬¾Í¿ÉÒÔÈöÔÏóÔÚºǫ́Ïß³ÌÏú»ÙÁË¡£
NSArray *tmp = self.array; self.array = nil; dispatch_async(queue, ^{ [tmp class]; });
|
²¼¾Ö¼ÆËã
ÊÓͼ²¼¾ÖµÄ¼ÆËãÊÇ App ÖÐ×îΪ³£¼ûµÄÏûºÄ CPU ×ÊÔ´µÄµØ·½¡£Èç¹ûÄÜÔÚºǫ́Ïß³ÌÌáǰ¼ÆËãºÃÊÓͼ²¼¾Ö¡¢²¢ÇÒ¶ÔÊÓͼ²¼¾Ö½øÐлº´æ£¬ÄÇôÕâ¸öµØ·½»ù±¾¾Í²»»á²úÉúÐÔÄÜÎÊÌâÁË¡£
²»ÂÛͨ¹ýºÎÖÖ¼¼Êõ¶ÔÊÓͼ½øÐв¼¾Ö£¬Æä×îÖÕ¶¼»áÂäµ½¶Ô UIView.frame/bounds/center
µÈÊôÐԵĵ÷ÕûÉÏ¡£ÉÏÃæÒ²Ëµ¹ý£¬¶ÔÕâЩÊôÐԵĵ÷Õû·Ç³£ÏûºÄ×ÊÔ´£¬ËùÒÔ¾¡Á¿Ìáǰ¼ÆËãºÃ²¼¾Ö£¬ÔÚÐèҪʱһ´ÎÐÔµ÷ÕûºÃ¶ÔÓ¦ÊôÐÔ£¬¶ø²»Òª¶à´Î¡¢Æµ·±µÄ¼ÆËãºÍµ÷ÕûÕâЩÊôÐÔ¡£
Autolayout
Autolayout ÊÇÆ»¹û±¾ÉíÌᳫµÄ¼¼Êõ£¬Ôڴ󲿷ÖÇé¿öÏÂÒ²ÄܺܺõÄÌáÉý¿ª·¢Ð§ÂÊ£¬µ«ÊÇ Autolayout
¶ÔÓÚ¸´ÔÓÊÓͼÀ´Ëµ³£³£»á²úÉúÑÏÖØµÄÐÔÄÜÎÊÌâ¡£Ëæ×ÅÊÓͼÊýÁ¿µÄÔö³¤£¬Autolayout ´øÀ´µÄ CPU ÏûºÄ»á³ÊÖ¸Êý¼¶ÉÏÉý¡£Èç¹ûÄã²»ÏëÊÖ¶¯µ÷Õû
frame µÈÊôÐÔ£¬Äã¿ÉÒÔÓÃһЩ¹¤¾ß·½·¨Ìæ´ú£¨±ÈÈç³£¼ûµÄ left/right/top/bottom/width/height
¿ì½ÝÊôÐÔ£©£¬»òÕßʹÓà ComponentKit¡¢AsyncDisplayKit µÈ¿ò¼Ü¡£
Îı¾¼ÆËã
Èç¹ûÒ»¸ö½çÃæÖаüº¬´óÁ¿Îı¾£¨±ÈÈç΢²©Î¢ÐÅÅóÓÑȦµÈ£©£¬Îı¾µÄ¿í¸ß¼ÆËã»áÕ¼ÓúܴóÒ»²¿·Ö×ÊÔ´£¬²¢ÇÒ²»¿É±ÜÃâ¡£Èç¹ûÄã¶ÔÎı¾ÏÔʾûÓÐÌØÊâÒªÇ󣬿ÉÒԲο¼ÏÂ
UILabel ÄÚ²¿µÄʵÏÖ·½Ê½£ºÓà [NSAttributedString boundingRectWithSize:options:context:]
À´¼ÆËãÎı¾¿í¸ß£¬Óà -[NSAttributedString drawWithRect:options:context:]
À´»æÖÆÎı¾¡£¾¡¹ÜÕâÁ½¸ö·½·¨ÐÔÄܲ»´í£¬µ«ÈÔ¾ÉÐèÒª·Åµ½ºǫ́Ï߳̽øÐÐÒÔ±ÜÃâ×èÈûÖ÷Ï̡߳£Èç¹ûÄãÓà CoreText
»æÖÆÎı¾£¬ÄǾͿÉÒÔÏÈÉú³É CoreText ÅŰæ¶ÔÏó£¬È»ºó×Ô¼º¼ÆËãÁË£¬²¢ÇÒ CoreText ¶ÔÏó»¹Äܱ£ÁôÒÔ¹©ÉÔºó»æÖÆÊ¹Óá£
Îı¾äÖȾ
ÆÁÄ»ÉÏÄÜ¿´µ½µÄËùÓÐÎı¾ÄÚÈݿؼþ£¬°üÀ¨ UIWebView£¬Ôڵײ㶼ÊÇͨ¹ý CoreText ÅŰ桢»æÖÆÎª
Bitmap ÏÔʾµÄ¡£³£¼ûµÄÎı¾¿Ø¼þ £¨UILabel¡¢UITextView µÈ£©£¬ÆäÅŰæºÍ»æÖƶ¼ÊÇÔÚÖ÷Ï߳̽øÐе쬵±ÏÔʾ´óÁ¿Îı¾Ê±£¬CPU
µÄѹÁ¦»á·Ç³£´ó¡£¶Ô´Ë½â¾ö·½°¸Ö»ÓÐÒ»¸ö£¬ÄǾÍÊÇ×Ô¶¨ÒåÎı¾¿Ø¼þ£¬Óà TextKit »ò×îµ×²ãµÄ CoreText
¶ÔÎı¾Òì²½»æÖÆ¡£¾¡¹ÜÕâʵÏÖÆðÀ´·Ç³£Âé·³£¬µ«Æä´øÀ´µÄÓÅÊÆÒ²·Ç³£´ó£¬CoreText ¶ÔÏó´´½¨ºÃºó£¬ÄÜÖ±½Ó»ñÈ¡Îı¾µÄ¿í¸ßµÈÐÅÏ¢£¬±ÜÃâÁ˶à´Î¼ÆË㣨µ÷Õû
UILabel ´óСʱËãÒ»±é¡¢UILabel »æÖÆÊ±ÄÚ²¿ÔÙËãÒ»±é£©£»CoreText ¶ÔÏóÕ¼ÓÃÄÚ´æ½ÏÉÙ£¬¿ÉÒÔ»º´æÏÂÀ´ÒÔ±¸ÉÔºó¶à´ÎäÖȾ¡£
ͼƬµÄ½âÂë
µ±ÄãÓà UIImage »ò CGImageSource µÄÄǼ¸¸ö·½·¨´´½¨Í¼Æ¬Ê±£¬Í¼Æ¬Êý¾Ý²¢²»»áÁ¢¿Ì½âÂ롣ͼƬÉèÖõ½
UIImageView »òÕß CALayer.contents ÖÐÈ¥£¬²¢ÇÒ CALayer ±»Ìá½»µ½ GPU
ǰ£¬CGImage ÖеÄÊý¾Ý²Å»áµÃµ½½âÂë¡£ÕâÒ»²½ÊÇ·¢ÉúÔÚÖ÷Ï̵߳쬲¢ÇÒ²»¿É±ÜÃâ¡£Èç¹ûÏëÒªÈÆ¿ªÕâ¸ö»úÖÆ£¬³£¼ûµÄ×ö·¨ÊÇÔÚºǫ́Ïß³ÌÏȰÑͼƬ»æÖƵ½
CGBitmapContext ÖУ¬È»ºó´Ó Bitmap Ö±½Ó´´½¨Í¼Æ¬¡£Ä¿Ç°³£¼ûµÄÍøÂçͼƬ¿â¶¼×Ô´øÕâ¸ö¹¦ÄÜ¡£
ͼÏñµÄ»æÖÆ
ͼÏñµÄ»æÖÆÍ¨³£ÊÇÖ¸ÓÃÄÇЩÒÔ CG ¿ªÍ·µÄ·½·¨°ÑͼÏñ»æÖƵ½»²¼ÖУ¬È»ºó´Ó»²¼´´½¨Í¼Æ¬²¢ÏÔʾÕâÑùÒ»¸ö¹ý³Ì¡£Õâ¸ö×î³£¼ûµÄµØ·½¾ÍÊÇ
[UIView drawRect:] ÀïÃæÁË¡£ÓÉÓÚ CoreGraphic ·½·¨Í¨³£¶¼ÊÇḬ̈߳²È«µÄ£¬ËùÒÔͼÏñµÄ»æÖÆ¿ÉÒÔºÜÈÝÒ׵ķŵ½ºǫ́Ï߳̽øÐС£Ò»¸ö¼òµ¥Òì²½»æÖƵĹý³Ì´óÖÂÈçÏ£¨Êµ¼ÊÇé¿ö»á±ÈÕâ¸ö¸´Ôӵö࣬µ«ÔÀí»ù±¾Ò»Ö£©£º
- (void)display { dispatch_async(backgroundQueue, ^{ CGContextRef ctx = CGBitmapContextCreate(...); // draw in context... CGImageRef img = CGBitmapContextCreateImage(ctx); CFRelease(ctx); dispatch_async(mainQueue, ^{ layer.contents = img; }); }); }
|
GPU ×ÊÔ´ÏûºÄÔÒòºÍ½â¾ö·½°¸
Ïà¶ÔÓÚ CPU À´Ëµ£¬GPU ÄܸɵÄÊÂÇé±È½Ïµ¥Ò»£º½ÓÊÕÌá½»µÄÎÆÀí£¨Texture£©ºÍ¶¥µãÃèÊö£¨Èý½ÇÐΣ©£¬Ó¦Óñ任£¨transform£©¡¢»ìºÏ²¢äÖȾ£¬È»ºóÊä³öµ½ÆÁÄ»ÉÏ¡£Í¨³£ÄãËùÄÜ¿´µ½µÄÄÚÈÝ£¬Ö÷ÒªÒ²¾ÍÊÇÎÆÀí£¨Í¼Æ¬£©ºÍÐÎ×´£¨Èý½ÇÄ£ÄâµÄʸÁ¿Í¼ÐΣ©Á½Àà¡£
ÎÆÀíµÄäÖȾ
ËùÓÐµÄ Bitmap£¬°üÀ¨Í¼Æ¬¡¢Îı¾¡¢Õ¤¸ñ»¯µÄÄÚÈÝ£¬×îÖÕ¶¼ÒªÓÉÄÚ´æÌá½»µ½ÏԴ棬°ó¶¨Îª GPU Texture¡£²»ÂÛÊÇÌá½»µ½ÏÔ´æµÄ¹ý³Ì£¬»¹ÊÇ
GPU µ÷ÕûºÍäÖȾ Texture µÄ¹ý³Ì£¬¶¼ÒªÏûºÄ²»ÉÙ GPU ×ÊÔ´¡£µ±Ôڽ϶Ìʱ¼äÏÔʾ´óÁ¿Í¼Æ¬Ê±£¨±ÈÈç
TableView ´æÔڷdz£¶àµÄͼƬ²¢ÇÒ¿ìËÙ»¬¶¯Ê±£©£¬CPU Õ¼ÓÃÂʺܵͣ¬GPU Õ¼Ó÷dz£¸ß£¬½çÃæÈÔÈ»»áµôÖ¡¡£±ÜÃâÕâÖÖÇé¿öµÄ·½·¨Ö»ÄÜÊǾ¡Á¿¼õÉÙÔÚ¶Ìʱ¼äÄÚ´óÁ¿Í¼Æ¬µÄÏÔʾ£¬¾¡¿ÉÄܽ«¶àÕÅͼƬºÏ³ÉΪһÕŽøÐÐÏÔʾ¡£
µ±Í¼Æ¬¹ý´ó£¬³¬¹ý GPU µÄ×î´óÎÆÀí³ß´çʱ£¬Í¼Æ¬ÐèÒªÏÈÓÉ CPU ½øÐÐÔ¤´¦Àí£¬Õâ¶Ô CPU ºÍ GPU
¶¼»á´øÀ´¶îÍâµÄ×ÊÔ´ÏûºÄ¡£Ä¿Ç°À´Ëµ£¬iPhone 4S ÒÔÉÏ»úÐÍ£¬ÎÆÀí³ß´çÉÏÏÞ¶¼ÊÇ 4096x4096£¬ËùÒÔ£¬¾¡Á¿²»ÒªÈÃͼƬºÍÊÓͼµÄ´óС³¬¹ýÕâ¸öÖµ¡£
ÊÓͼµÄ»ìºÏ (Composing)
µ±¶à¸öÊÓͼ£¨»òÕß˵ CALayer£©ÖصþÔÚÒ»ÆðÏÔʾʱ£¬GPU »áÊ×ÏȰÑËûÃÇ»ìºÏµ½Ò»Æð¡£Èç¹ûÊÓͼ½á¹¹¹ýÓÚ¸´ÔÓ£¬»ìºÏµÄ¹ý³ÌÒ²»áÏûºÄºÜ¶à
GPU ×ÊÔ´¡£ÎªÁ˼õÇáÕâÖÖÇé¿öµÄ GPU ÏûºÄ£¬Ó¦ÓÃÓ¦µ±¾¡Á¿¼õÉÙÊÓͼÊýÁ¿ºÍ²ã´Î£¬²¢ÔÚ²»Í¸Ã÷µÄÊÓͼÀï±êÃ÷
opaque ÊôÐÔÒÔ±ÜÃâÎÞÓÃµÄ Alpha ͨµÀºÏ³É¡£µ±È»£¬ÕâÒ²¿ÉÒÔÓÃÉÏÃæµÄ·½·¨£¬°Ñ¶à¸öÊÓͼԤÏÈäÖȾΪһÕÅͼƬÀ´ÏÔʾ¡£
ͼÐεÄÉú³É
CALayer µÄ border¡¢Ô²½Ç¡¢ÒõÓ°¡¢ÕÚÕÖ£¨mask£©£¬CASharpLayer µÄʸÁ¿Í¼ÐÎÏÔʾ£¬Í¨³£»á´¥·¢ÀëÆÁäÖȾ£¨offscreen
rendering£©£¬¶øÀëÆÁäÖȾͨ³£·¢ÉúÔÚ GPU ÖС£µ±Ò»¸öÁбíÊÓͼÖгöÏÖ´óÁ¿Ô²½ÇµÄ CALayer£¬²¢ÇÒ¿ìËÙ»¬¶¯Ê±£¬¿ÉÒԹ۲쵽
GPU ×ÊÔ´ÒѾռÂú£¬¶ø CPU ×ÊÔ´ÏûºÄºÜÉÙ¡£Õâʱ½çÃæÈÔÈ»ÄÜÕý³£»¬¶¯£¬µ«Æ½¾ùÖ¡Êý»á½µµ½ºÜµÍ¡£ÎªÁ˱ÜÃâÕâÖÖÇé¿ö£¬¿ÉÒÔ³¢ÊÔ¿ªÆô
CALayer.shouldRasterize ÊôÐÔ£¬µ«Õâ»á°ÑÔ±¾ÀëÆÁäÖȾµÄ²Ù×÷ת¼Þµ½ CPU ÉÏÈ¥¡£¶ÔÓÚÖ»ÐèÒªÔ²½ÇµÄijЩ³¡ºÏ£¬Ò²¿ÉÒÔÓÃÒ»ÕÅÒѾ»æÖƺõÄÔ²½ÇͼƬ¸²¸Çµ½Ô±¾ÊÓͼÉÏÃæÀ´Ä£ÄâÏàͬµÄÊÓ¾õЧ¹û¡£×î³¹µ×µÄ½â¾ö°ì·¨£¬¾ÍÊǰÑÐèÒªÏÔʾµÄͼÐÎÔÚºǫ́Ï̻߳æÖÆÎªÍ¼Æ¬£¬±ÜÃâʹÓÃÔ²½Ç¡¢ÒõÓ°¡¢ÕÚÕÖµÈÊôÐÔ¡£
Óà Instruments À´¼ìÑéÄãµÄapp
ʱ¼äʼþ²é¿´Æ÷-Time Profiler
ÔÚxcodeµÄ²Ëµ¥ÖÐÑ¡Ôñ product->Profile
ÎÒÃǻῴµ½ÏÂÃæµÄ½çÃæ£ºInstruments
µã»÷Time Profiler½øÈë¡£

ÏÂÃæÎÒÃÇÀ´ÉÈçϵĿØÖÆÃæ°å£º

ÒÔϽéÉÜÏÂÅäÖÃÑ¡Ï
1.Separate by Thread: ÿ¸öÏß³ÌÓ¦¸Ã·Ö¿ª¿¼ÂÇ¡£Ö»ÓÐÕâÑùÄã²ÅÄܾ¾³öÄÇЩ´óÁ¿Õ¼ÓÃCPUµÄ"ÖØ"Ï̡߳£
2.Invert Call Tree: ´ÓÉϵ¹Ï¸ú×Ù¶ÑÕ»,ÕâÒâζ×ÅÄã¿´µ½µÄ±íÖеķ½·¨,½«ÒÑ´ÓµÚ0Ö¡¿ªÊ¼È¡Ñù,Õâͨ³£ÄãÊÇÏëÒªµÄ,Ö»ÓÐÕâÑùÄã²ÅÄÜ¿´µ½CPUÖл°·Ñʱ¼ä×îÉîµÄ·½·¨.Ò²¾ÍÊÇ˵FuncA{FunB{FunC}}¹´Ñ¡´ËÏîºó¶ÑÕ»ÒÔC->B-A
°Ñµ÷Óò㼶×îÉîµÄCÏÔʾÔÚ×îÍâÃæ¡£
3.Hide System Libraries: ¹´Ñ¡´ËÏîÄã»áÏÔʾÄãappµÄ´úÂë,ÕâÊǷdz£ÓÐÓõÄ.
ÒòΪͨ³£ÄãÖ»¹ØÐÄcpu»¨ÔÚ×Ô¼º´úÂëÉϵÄʱ¼ä²»ÊÇϵͳÉϵġ£
4.Flatten Recursion: µÝ¹éº¯Êý, ÿ¸ö¶ÑÕ»¸ú×ÙÒ»¸öÌõÄ¿¡£
5.Top Functions: Ò»¸öº¯Êý»¨·ÑµÄʱ¼äÖ±½ÓÔڸú¯ÊýÖеÄ×ܺͣ¬ÒÔ¼°ÔÚº¯Êýµ÷Óøú¯ÊýËù»¨·ÑµÄʱ¼äµÄ×Üʱ¼ä¡£Òò´Ë£¬Èç¹ûº¯ÊýAµ÷ÓÃB£¬ÄÇôAµÄʱ¼ä±¨¸æÔÚA»¨·ÑµÄʱ¼ä¼ÓÉÏB.»¨·ÑµÄʱ¼ä,Õâ·Ç³£ÕæÓÐÓã¬ÒòΪËü¿ÉÒÔÈÃÄãÿ´Îϵ½µ÷ÓöÑջʱÌô×î´óµÄʱ¼äÊý×Ö£¬¹éÁãÔÚÄã×îºÄʱµÄ·½·¨¡£
ÕÒµ½DetailÃæ°åÀï×îºÄʱµÄ½ø³Ì£¬µã»÷½øÈ¥¿ÉÒÔ¿´µ½´úÂ룬¹Û²ìÊÇ·ñÓÐÒ죬Èç´Ë±ã¿ÉÖð²½ÓÅ»¯Ó¦ÓõÄÔËÐÐЧ¹ûÁË¡£

Ð޸ĺúó,ÔÚÒÇÆ÷ÖØÐÂÔËÐиÃÓ¦ÓóÌÐòProduct¡ªProfile£¨»ò?I-¼Çס£¬ÕâЩ¿ì½Ý¼üÕæµÄ»áΪÄú½ÚʡһЩʱ¼ä£©¡£
·ÖÅ乤¾ß

·ÖÅ乤¾ß

µã»÷½øÈë
Õâ¸öʱºòÄã»á·¢ÏÖÁ½¸öÇúÄ¿¡£Ò»¸ö½Ð(·ÖÅä)Allocations£¬ÒÔ¼°Ò»¸ö±»³ÆÎªVM Tracker(ÐéÄâ»ú¸ú×Ù)¡£
ÄÚ´æÐ¹Â©ÓÐÁ½ÖÖй©¡£µÚÒ»¸öÊÇÕæÕýµÄÄÚ´æÐ¹Â©£¬Ò»¸ö¶ÔÏóÉÐδ±»ÊÍ·Å£¬µ«ÊDz»ÔÙ±»ÒýÓõÄÁË¡£Òò´Ë£¬´æ´¢Æ÷²»Äܱ»ÖØÐÂʹÓᣵڶþÀàй©ÊDZȽÏÂ鷳һЩ¡£Õâ¾ÍÊÇËùνµÄ¡°ÎÞ½çÄÚ´æÔö³¤¡±¡£Õâ·¢ÉúÔÚÄÚ´æ¼ÌÐø·ÖÅ䣬²¢ÓÀÔ¶²»»áÓлú»á±»ÊÍ·Å¡£Èç¹ûÓÀÔ¶ÕâÑùÏÂÈ¥ÄãµÄ³ÌÐòÕ¼ÓõÄÄÚ´æ»áÎÞÏÞ´ó,µ±³¬¹ýÒ»¶¨ÄÚ´æµÄ»°
»á±»ÏµÍ³µÄ¿´ÃŹ·¸økillµô¡£
Äڴ澯¸æÊÇios´¦Àíapp×îºÃµÄ·½Ê½£¬ÓÈÆäÊÇÔÚÄÚ´æÔ½À´Ô½³Ô½ôµÄʱºò,ÄãÐèÒªÇå³ýһЩÄÚ´æ¡£ÄÚ´æÒ»Ö±Ôö³¤ÆäʵҲ²»Ò»¶¨ÊÇÄãµÄ´úÂë³öÁËÎÊÌâ,Ò²ÓпÉÄÜÊÇUIKit
ϵͳ¿ò¼Ü±¾Éíµ¼Öµġ£

×Ô¼º¶¯ÊÖ¹Û²ìÏ£¬Ò»ÇÐ×ÔÈ»Ã÷ÁË¡£
ÄÚ´æÐ¹Â¶
ÕâÒ»Ààй©ÊÇÇ°ÃæÌáµ½µÄ - µ±Ò»¸ö¶ÔÏó²»ÔÙ±»ÒýÓÃʱ³öÏÖµÄÄÇÖÖ,¼ì²âй©¿ÉÒÔÀí½âΪһ¸öºÜ¸´ÔÓµÄÊÂÇ飬µ«Ð¹Â©µÄ¹¤¾ß¼ÇµÃÒÑ·ÖÅäµÄËùÓжÔÏó£¬Í¨¹ý¶¨ÆÚɨÃèÿ¸ö¶ÔÏóÒÔÈ·¶¨ÊÇ·ñÓÐÈκβ»ÄÜ´ÓÈÎºÎÆäËû¶ÔÏó·ÃÎʵġ£
¹Ø±ÕÒÇÆ÷£¬»Øµ½XcodeºÍÑ¡ÔñProduct->Profile

ÄÚ´æÐ¹Â¶
µã»÷½øÈ룬ÔËÐУº

ÔËÐÐ
×Ô¼º¶¯ÊÖ³¢ÊÔÏ£¬ÕÒµ½ÓÒ±ßÃæ°åÀÈç¹ûÓкÚÉ«±êʶµÄ·½·¨£¬½øÈë¿´¿´¡£Ñ§Ï°¾ÍÊǶೢÊÔ¡£
ƪ·ùÓÐÏÞ£¬¸ü¶àµÄÄÚÈÝÎÒÃÇÏ´ÎÔÙÁÄ¡£
|