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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎ±àдÎȶ¨Á÷³©µÄiOSÒÆ¶¯¶ËÓ¦ÓÃ
 
×÷ÕߣºÎâ°× À´Ô´£º¼òÊé ·¢²¼ÓÚ£º 2016-4-28
  2741  次浏览      28
 

²»Íü³õÐÄ

ÔÚ¹ýÈ¥¼¸Äê¼ä£¬Òƶ¯Ó¦ÓÃÒÔÀ×öªÖ®ÊÆÏ¯¾íÈ«Çò¡£ÎÒÃÇÔÚ¹¤×÷ºÍÐÝÏÐʱ¼äÖÐʹÓû¥ÁªÍøµÄ·½Ê½£¬ÒѾ­Ëæ×ÅÒÆ¶¯Ó¦ÓõÄǰ½ø½Å²½·¢ÉúÁ˱ä¸ï¡£ÔÚ¿ª·¢Ó¦ÓõÄʱºò£¬ÈËÃÇÒ²¿ªÊ¼¿¼ÂÇ¡°Òƶ¯ÓÅÏÈ¡±µÄ×ö·¨¡£ÎÒÃÇÕýÔÚÃæ¶ÔÈ«ÐÂÒ»´úµÄÒÆ¶¯É豸£¬ÖîÈç¿É´©´÷É豸»òÖÚ¶àÒÆ¶¯Åä¼þ¡ª¡ªÕýÊÇËüÃǹ¹³ÉÁË¡°ÍòÎﻥÁª¡±µÄÊÀ½ç¡£ÎÒÃǽ«Ãæ¶ÔȫеÄÓû§½çÃæ£¬Í¨¹ýËüÃÇÊý¾Ýչʾ¼°Ö¸Áî½ÓÊÕ´¦Àí¡£Í¬Ê±£¬ÎÒÃÇ»¹½«¿´µ½£¬Ô½À´Ô½¶àµÄ¹«Ë¾½«ÕæÕýµØ¼ùÐС°Òƶ¯ÓÅÏÈ¡±µÄ˼·¡£¶øÔÚδÀ´ÊýÄêÖУ¬ÕâÒ»Çж¼½«Ó°ÏìÎÒÃÇÉè¼Æ¡¢¿ª·¢ºÍ²âÊÔÈí¼þµÄ·½Ê½¡£

°ÑÒ»¸ö¿Í»§¶Ë×öµÃÎȶ¨¡¢ÎÞ±¼À£¡¢Á÷³©£¬ÊÇд¿Í»§¶ËÅóÓѵÄÃÎÏ룬µ«ÊÇ£¬ÎÒÃÇÃæÁٵĽá¹ûÍùÍùÊ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

ÄÚ´æÐ¹Â¶

µã»÷½øÈ룬ÔËÐУº

ÔËÐÐ

×Ô¼º¶¯ÊÖ³¢ÊÔÏ£¬ÕÒµ½ÓÒ±ßÃæ°åÀÈç¹ûÓкÚÉ«±êʶµÄ·½·¨£¬½øÈë¿´¿´¡£Ñ§Ï°¾ÍÊǶೢÊÔ¡£

ƪ·ùÓÐÏÞ£¬¸ü¶àµÄÄÚÈÝÎÒÃÇÏ´ÎÔÙÁÄ¡£

 

 

   
2741 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ