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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS ÄÚ´æÐ¹Â©¼à²â×Ô¶¯»¯
 
À´Ô´£ºYong's Blog ·¢²¼ÓÚ£º 2017-2-20
  2139  次浏览      28
 

Õâ¸öÔÂÒòΪ×éÄÚ iOS ¹¤³Ìʦ½ôȱ£¬ËùÒÔÁÙʱ¿ÐÆðÁËÁ½Äê¶àû¿´µÄ ObjC Ïà¹ØµÄÄÚÈÝ£¬³äµ±¾È»ð¶ÓÔ±£¬¿Í´®ÁËÒ»°Ñ iOS ¹¤³Ìʦ¡£±»Ö¸ÅɵĵÚÒ»¸öÈÎÎñÊÇÅŲé App iOS °æ±¾´æÔÚµÄÑÏÖØµÄÄÚ´æÐ¹Â©µÄÎÊÌ⣬ԭÒòÊÇ iOS 10 µÄijЩϵͳ bug £¨²Î¿¼ÎÄÕ£ºÁÄÁÄÆ»¹ûµÄBug - iOS 10 nano_free Crash£©µ¼ÖÂÏßÉϳöÏÖÁ˽϶àµÄ nano_free ºÍ nano_realloc µÄ crash ÎÊÌ⣬¶øÕâЩ crash »á±»´¥·¢µÄ¸ù±¾Ô­ÒòÔòÊÇ App µÄÄÚ´æÐ¹Â©ÎÊÌâûÓкܺõÄÖÎÀí¡£

iOS ÄÚ´æÐ¹Â©µÄÔ­ÒòÎ޷ǾÍÊÇÄÇô¼¸¸ö£¬¸ú Android ·Ç³£ÏàËÆ£ºÄ³Ð©ÖØÐͶÔÏó£¨Activity »òÕß UIViewController£©Ôڸñ»ÊͷŵÄʱºòδÊÍ·Å£¬Ò»Ö±±»ÆäÄÚ²¿µÄ¶ÔÏóËù³ÖÓС£ÅŲéÄÚ´æÐ¹Â©µÄÊÖ¶ÎÔÚ Android ÉÏÓÐ MAT »òÕß×îÐ嵀 Android Studio£¬ÔÚ iOS ÔòÉÏÖ÷ÒªÒÀÀµ Xcode ÌṩµÄ Instruments ¹¤¾ß¡£µ«ÊÇÖÚËùÖÜÖª£¬µÈÄãÖªµÀ´æÔÚÄÚ´æÐ¹Â©ÔÙÀ´ÅŲé¾ÍÒѾ­ºÜÍíÁË¡£¶øÇÒÕâЩ¹¤¾ßËäÈ»ºÃÓ㬵«ÊÇÕæµÄÅŲéÆðÀ´»¹ÊÇÏà¶Ô±È½ÏÀ§Äѵģ¬ÒòΪºÜ´óµÄÔ­ÒòÔÚÓÚÄã²¢²»Çå³þ App µ½µ×ÔÚÄöÒ³Ãæ·¢ÉúÁËй©£¡

ÔÚ Android ÉÏ£¬Square Õâ¼Ò¹«Ë¾ÌṩÁ˷dz£ÓÐÃûµÄ¹¤¾ß£ºleakcanary£¬À´°ïÖú¿ª·¢ÕßÃÇÔÚÈÕ³£¿ª·¢¹ý³ÌÖоÍÄܹ»·¢ÏÖÄÚ´æÐ¹Â©¡£µ«ÔÚ iOS ÉÏÄØ£¿ÔÚ Google µÄʱºò£¬ÎÒ·¢ÏÖÁËÁ½¸ö¹¤¾ß£¬Ò»¸öÊÇÕâÆªÎÄÕ½«Òª·­Òë²¢½éÉÜµÄ Facebook ¿ªÔ´µÄÈý¼þÌ×£¬ÁíÒ»¸öÔòÊǹúÄÚ΢ÐÅÔĶÁÍŶÓ×öµÄ?MLeaksFinder¡£

¹ØÓÚ MLeaksFinder ÕâÀïÓÐÁ½ÆªÆä¹Ù·½ÌṩµÄÎÄÕ½éÉÜ£º

MLeaksFinder£º¾«×¼ iOS ÄÚ´æÐ¹Â¶¼ì²â¹¤¾ß

MLeaksFinder ÐÂÌØÐÔ

¼ò¶øÑÔÖ®£¬MLeaksFinder ʹÓÃÁËÒ»¸ö·Ç³£ tricky µÄ·½·¨À´¼ì²âÄÚ´æÐ¹Â©£ºÍ¨³£Ò»¸ö UIViewController ÔÚ±» pop Ö®ºó½«»áºÜ¿ì±»ÊÍ·Å£¬¼ÙÉèÔÚ pop 3 ÃëÖÓÖ®ºóÈÔȻûÓб»ÊÍ·Å£¬Ôò¿ÉÒÔÈÏΪÕâ¸ö UIViewController ´æÔÚй©µÄÎÊÌ⣨ÆäʵÀàËÆµÄ·½°¸Í¬ÑùÒ²¿ÉÒÔÔÚ Android ÉÏʵÏÖ£¬¾ÝÎÒËù֪΢ÐÅÔÚÔçÆÚ¾ÍÓÐÀàËÆÔ­ÀíʵÏÖµÄÓÃÔÚ Android ÉϵÄÄÚ´æÐ¹Â©¼à²â¹¤¾ßÁË£©¡£ÔÚºóÐøµÄ¸üа汾ÖУ¬MLeaksFinder Ò²ÒÀÀµÁË Facebook µÄ?FBRetainCycleDetector?À´¸¨ÖúÅжÏÄÚ´æÐ¹Â©ÊÇ·ñÊÇÓÉÑ­»·ÒýÓÃÒýÆðµÄ¡£

MLeaksFinder µÄÔ­Àí·Ç³£¼òµ¥µ«ÓÐЧ£¬°ïÖúÎÒÅŲéÁË App ÖдæÔڵIJ»ÉÙÄÚ´æÐ¹Â©ÎÊÌ⣬¶øÇÒ¶ÔÓÚÕû¸öÓ¦Óûù±¾ÁãÇÖÈ룬²»ÐèÒª×öÈκεÄÅäÖÃÓëÐ޸ġ£²»¹ýȱµãÒ²ÔÚÕâÀÒòΪÈç¹ûÒª½«Æä×÷ΪÈÕ³£×Ô¶¯»¯µÄ¹¤¾ßʹÓõϰ£¬ÎÒÏ£Íû MLeaksFinder ±¾Éí¿ÉÒÔÌṩ»Øµ÷½Ó¿Ú£¬ÒÔ±ãÔÚÄÚ´æÐ¹Â©·¢ÉúʱÎÒ¿ÉÒÔÑ¡ÔñÊǵ¯³ö Alert Ìáʾ¿ª·¢Õߣ¬»¹ÊÇͨ¹ýºǫ́Éϱ¨µÄ·½Ê½Ìá½»¡£µ±È»£¬¿ªÔ´µÄºÃ´¦ÔÚÓÚ¿ÉÒÔÐÞ¸ÄÔ´ÂëÂú×ã×Ô¼ºµÄÐèÇ󣬺óÐøÒ²»áÏòÆäÌá½» PR£¬ÍêÉÆÕâ¸ö·Ç³£¾«ÇɵÄÏîÄ¿¡£

Facebook µÄ¹¤³ÌʦÃÇÆäʵÔç¾ÍÒѾ­½« iOS µÄÄÚ´æÐ¹Â©ÅŲé×Ô¶¯»¯ÁË£¬²¢·¢²¼ÁËһƪ·Ç³£²»´íµÄÎÄÕÂÀ´½éÉÜÆäÔ­Àí£¬ÒÔ¼°¿ªÔ´ÁËËûÃǵÄÈý¸ö¹¤¾ßÌ×¼þ¡£ÎªÁ˼ÓÉî¶Ô Objective-C ÄÚ´æ¹ÜÀíµÄÀí½âÒÔ¼°¶Ô¿âµÄÔ­ÀíµÄÁ˽⣬ÔÚÎÄÄ©£¬»áÓÐÎÒ¶ÔÕâȫƪӢÎÄÎÄÕµķ­Òë¡£

¶ÔÓÚ¹¤³Ìʦ¶øÑÔ£¬×Ô¶¯»¯µÄ¹¤¾ßÕæµÄÊÇÅÅÃûǰ¼¸µÄÉú²úÁ¦¡£

Èç¹û²»Ïë¿´·­ÒëµÄ»°£¬ÕâÀïÒ²Ìṩһ¸ö´ó¸ÅµÄÈ«ÎÄÖØµã¸ÅÀÀ£º

Èý¸ö¿ªÔ´¹¤¾ß£º

1.FBRetainCycleDetector

Ö÷ÒªÓÃÓÚ¼ì²âÑ­»·ÒýÓÃ

2.FBAllocationTracker

Ö÷ÒªÓÃÓÚ¿ìËÙ¼ì²âDZÔÚµÄÄÚ´æÐ¹Â©¶ÔÏ󣬲¢Ìṩ¸ø FBRetainCycleDetector ½øÐмì²â

3.FBMemoryProfiler

¿ÉÊÓ»¯¹¤¾ß£¬Ö±½ÓǶÈëµ½ App ÖУ¬¿ÉÒÔÆðµ½ÔÚ App ÖÐÖ±½Ó²é¿´ÄÚ´æÊ¹ÓÃÇé¿ö£¬²¢É¸Ñ¡Ç±ÔÚй©¶ÔÏóµÄ×÷ÓÃ

Facebook µÄ×Ô¶¯»¯£º¿Í»§¶Ë×Ô¶¯¼à²â -> Éϱ¨·þÎñ¶Ë -> ¹éÀà/ɸѡ -> ·Ö·¢¸øÖ¸¶¨ÈËÔ± -> ´¦ÀíÄÚ´æÐ¹Â©

δ¿ªÔ´µÄ²¿·ÖÔÚÓÚ·þÎñ¶ËÈçºÎ¶ÔÉϱ¨µÄÑ­»·ÒýÓÃÁ´½øÐйéÀàÓëɸѡ£¬²»¹ý Facebook µÄ¹¤³ÌʦÃÇÔÚÎÄÖиø³öÁËËûÃÇ×Ô¼ºµÄ²ßÂÔ

ÍØÕ¹ÔĶÁ

×îºó·ÅһЩÏà¹ØµÄ֪ʶµãµÄÍØÕ¹ÔĶÁ£¬ÓÐÖúÓÚÀí½âÈ«ÎÄÄÚÈÝ¡£

Objective-C Class Ivar Layout ̽Ë÷

Type Encodings

P.S.?Sunny ÀÏʦ£¨µÎµÎ?DynamicCocoa?µÄ×÷Õߣ©¶ÔÓÚ OC Runtime ÍæµÃÕæÊÇÁ¿´ËûµÄ²©¿Í·Ç³£³¤¼ûʶ¡­

P.P.S.?ÂìÒϽð·þ²Æ¸»ÊÂҵȺ»¹ÔÚÕÐÆ¸ Android / iOS ¹¤³Ìʦ£¬Èç¹ûÄã¸ÐÐËȤµÄ»°»¶Ó­¸øÎÒ·¢À´ÄãµÄ¼òÀú£ºyong.hy[AT]alipay.com

Ô­ÎÄÁ´½Ó [Ð跭ǽ]£ºAutomatic memory leak detection on iOS

ÒëÎÄ

ÄÚ´æÊÇÒÆ¶¯É豸ÉϵĹ²Ïí×ÊÔ´£¬Èç¹ûÒ»¸ö App ÎÞ·¨ÕýÈ·µØ½øÐÐÄÚ´æ¹ÜÀíµÄ»°£¬½«»áµ¼ÖÂÄÚ´æÏûºÄ´ù¾¡£¬ÉÁÍËÒÔ¼°ÐÔÄܵÄÑÏÖØÏ½µ¡£

Facebook µÄ iOS °æ±¾µÄÐí¶à¹¦ÄÜÄ£¿é¹²ÓÃÁËͬһ·ÝÄÚ´æ¿Õ¼ä£¬Èç¹ûÆäÖеÄijһ¸öÄ£¿éÏûºÄÁËÌØ±ð¶àµÄÄÚ´æ×ÊÔ´µÄ»°£¬½«»á¶ÔÕû¸ö App Ôì³ÉÑÏÖØÓ°Ïì¡£¾Ù¸öÀõ×Ó£¬µ±Ä³¸ö¹¦ÄÜÄ£¿é²»Ð¡ÐÄÔì³ÉÁËÄÚ´æÐ¹Â©µÄʱºò£¬Õâ¸öÇé¿ö¾ÍºÜÓпÉÄܻᷢÉú¡£

ÔÚ Facebook£¬ÎÒÃÇÓзdz£¶àµÄ¹¤³ÌʦͬʱÔÚÒ»¸ö´úÂë²Ö¿âϽøÐв¢Ðпª·¢¡£ÄÚ´æÐ¹Â©ÊÇÔÚ¿ª·¢¹ý³ÌÖÐÄÑÒÔ±ÜÃâ»áÓö¼ûµÄÎÊÌâ¡£µ±ÄÚ´æÐ¹Â©·¢Éúʱ£¬ÎÒÃǾÍÐèÒª¿ìËÙµØÈ¥·¢ÏÖÈ»ºóÐÞ¸´Ëü¡£

ÏÖÔÚÒѾ­´æÔÚһЩ¿ª·¢Õß¹¤¾ßÀ´¸¨Öú·¢ÏÖÄÚ´æÐ¹Â©ÁË£¬µ«ÊÇËüÃǵĹ²Í¬µãÊÇÐèÒª´óÁ¿µÄÈ˹¤²Ù×÷£º

´ò¿ª Xcode ²¢Ñ¡Ôñ build for profiling À´±àÒëÄãµÄ¹¤³Ì

´ò¿ª Instruments ¹¤¾ß

³¢ÊÔÔÚÄãµÄÓ¦ÓÃÉϾ¡¿ÉÄÜ¶àµØÖØÏÖ¸ü¶àµÄ³¡¾°ÓëÐÐΪ

¹Û²ìÄڴ湤¾ßµÄ×ßÊÆÍ¼

ÕÒµ½ÄÚ´æÐ¹Â©µÄÔ´Í·

ÐÞ¸´Ëü£¡

ÕâÑùµÄÈ˹¤ÅŲéÓëÐÞ¸´¹¤³Ìÿ´Î¶¼µÃ²»¶ÏµØÖظ´²Ù×÷¡£ÕýÒòΪÈç´Ë£¬ÎÒÃǺÜÄÑÔÚµü´ú½×¶ÎÔçÆÚ¾Í¶¨Î»ÓëÐÞ¸´ÄÚ´æÎÊÌâ¡£

½«ÄÚ´æÐ¹Â©µÄÅŲé¹ý³Ì¾¡¿ÉÄܵØ×Ô¶¯»¯£¬¼õÉÙ¿ª·¢ÈËÔ±µÄÈ˹¤¸ÉÔ¤£¬¿ÉÒÔ°ïÖúÎÒÃǸü¿ìµØÈ¥ÕÒµ½ÄÚ´æÐ¹Â©µÄµØ·½¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇÒѾ­ÔÚÄÚ²¿¿ª·¢ÁËÒ»Ì×¹¤¾ßÀ´°ïÖúÎÒÃÇ×Ô¶¯»¯Õâ¸öÅŲé¹ý³Ì£¬²¢ÇÒÒѾ­°ïÖúÎÒÃǽâ¾öÁËÐí¶à´úÂëÖдæÔÚµÄÄÚ´æÐ¹Â©ÎÊÌâ¡£½ñÌ죬ÎÒÃǺܸßÐËÏò´ó¼ÒÐû²¼ÎÒÃÇÕýʽ¿ªÔ´ÕâÌ×ÄÚ´æÐ¹Â©ÅŲ鹤¾ß£ºFBRetainCycleDetector£¬FBAllocationTracker?ºÍ?FBMemoryProfiler¡£

Ñ­»·ÒýÓÃ

Objective-C ʹÓÃÒýÓüÆÊýÀ´¹ÜÀíÄÚ´æÓëÊÍ·Åδ±»ÒýÓõĶÔÏó¡£ÄÚ´æÖеĶÔÏó A ¿ÉÒÔÈöÔÏó B µÄÒýÓüÆÊý¼ÓÒ»£¬¼´ retain£¬À´Ê¹¶ÔÏó B ¾¡¿ÉÄܾõشæÔÚÄÚ´æÖУ¨Ö»Òª¶ÔÏó A ²»¶ÔËü¡°¼õÒ»¡±£¬¼´ release£©¡£Ò²¾ÍÊÇ˵£º¶ÔÏó A ³ÖÓÐÁ˶ÔÏó B ¡£

´ó¶àÊýÇé¿öÏ£¬ÒýÓüÆÊýÕâÌ×»úÖÆ¶¼¿ÉÒÔÔË×÷µÃºÜºÃ¡£µ«ÊÇ£¬µ±Á½¸ö¶ÔÏóÖ±½ÓµØ£¬»òÕ߸ü³£¼ûµÄÇéÐÎÊÇͨ¹ýijЩ¶ÔÏó¼ä½ÓµØ£¬»¥Ïà³ÖÓÐÁ˶Է½£¬Õâ¸öʱºò¾ÍÏÝÈëÁ˽©¾ÖÁË¡£ÕâÖÖ»¥Ïà³ÖÓжԷ½µÄÒýÓõÄÏÖÏó½Ð×öÑ­»·ÒýÓá£

Ñ­»·ÒýÓûᵼÖÂһϵÁеÄÎÊÌâ¡£×îºÃµÄÇé¿öÊÇ£¬Ð¹Â©µÄ¶ÔÏó±¾Éí¾Í»áÒ»Ö±³¤ÆÚµØÕ¼ÓÃÄÚ´æ¿Õ¼ä£¬ÕâÖÖÇé¿öÒ»°ã²»»áÔì³ÉÌ«´óµÄÄÚ´æÏûºÄ¡£Èç¹ûй©µÄ¶ÔÏó²»Í£µØÔö¼ÓÓë»ýÀÛ£¬ÄÇô App ÖÐÆäËû¹¦ÄÜÄ£¿éËùÄÜʹÓõÄÄÚ´æ¾Í»á¼õÉÙ¡£×µÄÇé¿öÔòÊÇ£¬ÄÚ´æÐ¹Â©µ¼ÖÂÁË App ÐèҪʹÓõÄÄڴ泬³öÁËÏÞÖÆ£¬ÕâʱӦÓþͻáÉÁÍËÁË¡£

ͨ¹ýÈ˹¤ÅŲéµÄÊֶΣ¬ÎÒÃÇ·¢ÏÖÎÒÃÇÓÐÌ«¶àÒòΪѭ»·ÒýÓõ¼ÖµÄÄÚ´æÐ¹Â©ÁË¡£ÈÕ³£±àÂëÖУ¬ÉÔ²»¼Ó×¢Òâ¾ÍÓпÉÄܰÑÑ­»·ÒýÓøøÒýÈëµ½´úÂëÀ¶øÖ®ºóÈ´²»ÈÝÒ×·¢ÏÖËûÃÇ¡£FBRetainCycleDetector?Õâ¸ö¹¤¾ß½«°ïÖúÎÒÃǰÑÑ­»·ÒýÓõļà²â±äµÃ¸ü¼Ó¼òµ¥¡£

ÔÚÔËÐÐÆÚ¼à²âÑ­»·ÒýÓÃ

ÔÚ Objective-C Öмì²âÑ­»·ÒýÓÿÉÒÔ³éÏóΪÔÚÒ»¸ö½ÚµãΪ¶ÔÏ󣬱ßΪ¶ÔÏóÖ®¼äµÄÒýÓùØÏµµÄÓÐÏòÎÞ»·Í¼£¨DAG ͼ£©ÖÐѰÕÒ´æÔڵĻ·¡£µ±ËùÓÐµÄ Objective-C ¶ÔÏóÒѾ­ÔÚÎÒÃǵÄÓÐÏòÎÞ»·Í¼ÖÐʱ£¬ÎÒÃÇËùÐèÒª×öµÄ¾ÍÊÇͨ¹ýÉî¶ÈÓÅÏÈËÑË÷Ëã·¨À´±éÀúËü£¬²¢ÕÒµ½Ñ­»·½Úµã¡£

ÕâÀïÓиöÊÓÆµ - Ð跭ǽ

½«Ñ­»·ÒýÓõļì²âÎÊÌâ³éÏóΪ¼òµ¥µÄÊý¾Ý½á¹¹Ëã·¨Ö®ºó£¬Õû¸ö·½°¸¾Í±äµÃ·Ç³£ÇåÎúÁË¡£ÎÒÃÇÐèҪȷÈϵľÍÊÇÎÒÃÇÄܹ»ÔÚÔËÐÐÆÚÕÒµ½ËùÓеÄÄÚ´æ¶ÔÏó²¢ÕÒ³öËûÃÇÖ®¼äËùÓеÄÒýÓùØÏµ¡£¶ÔÏóÖ®¼äµÄÒýÓùØÏµ¿ÉÄÜÊÇÈõÒýÓã¬Ò²¿ÉÄÜÊÇÇ¿ÒýÓ᣶øÖ»ÓжÔÏóÖ®¼äµÄÇ¿ÒýÓòŻᵼÖÂÑ­»·ÒýÓá£Òò´Ë£¬ÎÒÃÇÖ»ÐèÒªÕÒµ½Ã¿¸ö¶ÔÏóËù´æÔÚµÄÇ¿ÒýÓü´¿É¡£

ÐÒÔ˵ØÊÇ£¬Objective-C Ìṩ¸øÁËÎÒÃǷdz£Ç¿´óµÄ Runtime ¿â£¬¿ÉÒÔ°ïÖúÎÒÃÇÔÚÔËÐÐÆÚ»ñÈ¡×ã¹»µÄÊý¾ÝÀ´¹¹½¨ÕâÑùÒ»ÕÅÓÐÏòÎÞ»·Í¼¡£

ÓÐÏòÎÞ»·Í¼ÖеĽڵã¿ÉÒÔÊÇÒ»¸ö¶ÔÏ󣬻òÕßÊÇÒ»¸ö block£¬½ÓÏÂÀ´ÎÒÃǽ«·Ö±ð½øÐÐÌÖÂÛ¡£

Objects£¨¶ÔÏó£©

Objective-C Runtime ÌṩÁ˺ܶ๤¾ßÀ´°ïÖúÎÒÃÇÔÚÔËÐÐÆÚ»ñȡһ¸ö¶ÔÏóµÄÏêϸÐÅÏ¢£¨Ò²³Æ×÷ÄÚÊ¡£¬Introspection£¬ÕâÊÇÃæÏò¶ÔÏóÓïÑԺͻ·¾³µÄÒ»¸öÇ¿´óÌØÐÔ£©¡£

ÎÒÃÇÒª×öµÄµÚÒ»¼þÊÂÇé¾ÍÊÇ»ñÈ¡¶ÔÏóÖÐËùÓбäÁ¿µÄ ivar layout¡£

¶ÔÓÚÒ»¸ö¸ø¶¨µÄ¶ÔÏó£¬ËüµÄ ivar layout ¿ÉÒÔÈÃÎÒÃÇ»ñÈ¡µ½Õâ¸ö¶ÔÏó³ÖÓÐÁ˶àÉÙ¶Ô±ðµÄ¶ÔÏóµÄÒýÓùØÏµ¡£ivar layout ΪÎÒÃÇÌṩÁËÒ»¸öÄÚ´æµØÖ·Æ«ÒÆÁ¿µÄ¡°Ë÷Òý¡±£¬ÈÃÎÒÃÇÄܹ»Í¨¹ý¶Ô¡°Ë÷Òý¡±µÄµþ¼ÓÀ´µÃµ½ËüËù³ÖÓеÄÁíÒ»¸ö¶ÔÏóµÄÄÚ´æµØÖ·¡£OC Runtime Ò²¸øÎÒÃÇÌṩÁË¿ÉÒÔ»ñȡһ¸ö¶ÔÏóµÄËùÓеÄÈõÒýÓùØÏµµÄ¹¤¾ß£ºweak ivar layout¡£ÎÒÃÇ¿ÉÒÔ¼Ù¶¨£º ivar layout Óë weak ivar layout Ö®¼äµÄ¹ØÏµÁ´Ìõ²îÖµ¼´Ò»¸ö¶ÔÏóµÄËùÓÐÇ¿ÒýÓùØÏµ¡£

³ý´ËÖ®Í⣬»¹ÐèÒª¶îÍâ×öÒ»²¿·Ö¹¤×÷À´Ö§³Ö Objective-C++¡£ÔÚ Objective-C++ ÖУ¬ÎÒÃÇ¿ÉÒÔÔÚ structs Öж¨Òå¶ÔÏ󣬶øÕâÑùµÄ¶ÔÏ󲻻ᱻ ivar layout ÌṩË÷Òý¡£¶ø OC Runtime ¸ÕºÃÌṩÁËÀàÐͱàÂë»úÖÆ£¨Type Encoding£©À´°ïÖúÎÒÃÇ´¦ÀíÕâ¸öÎÊÌâ¡£¶ÔÓÚÿһ¸öʵÀý±äÁ¿£¬ÀàÐͱàÂë¿ÉÒÔ¸æËßÎÒÃÇÕâ¸ö¶ÔÏóÊÇʲôÑùµÄÊý¾ÝÀàÐÍ¡£Èç¹û¶ÔÏóÊǸö struct£¬ÄÇôÀàÐͱàÂë»á¸æËßÎÒÃÇÕâ¸ö struct ÊÇÓÉÄÄЩ×ֶκÍÀàÐÍ×é³ÉµÄ¡£ÎÒÃÇͨ¹ýת»»ÀàÐͱàÂëÀ´·¢ÏÖÄÄЩʵÀý±äÁ¿ÊÇ Objective-C µÄ¶ÔÏ󣬲¢¼ÆËãÄÚ´æµØÖ·µÄÆ«ÒÆÁ¿À´»ñÈ¡ËùÓÐËûÃÇÖ¸ÏòµÄ¶ÔÏóµØÖ·¡£

²»¹ýÈÔÈ»ÓÐһЩ±ß½ç case ÎÒÃDz»ÄÜÉîÈëµØÈ¥½â¾ö¡£´ó¶àÊýÊǸúһЩ¼¯ºÏÀàÐÍÏà¹ØµÄ£¬ÎÒÃDz»µÃ²»±éÀú¼¯ºÏÀ´»ñÈ¡ËùÓеıäÁ¿Ëù³ÖÓеĶÔÏó£¬Õâ¿ÉÄܻᵼÖÂһЩDZÔڵĸ±×÷Óá£

Blocks

Blocks ¸ú¶ÔÏóÓÐһЩ²»Í¬¡£OC Runtime ûÓÐÌṩ¸øÎÒÃǼòµ¥µÄ»ñÈ¡ËüµÄ ivar layout µÄ·½·¨£¬µ«ÊÇÎÒÃÇ¿ÉÒÔͨ¹ýһЩС trick À´½â¾öÕâ¸öÎÊÌâ¡£

ÎÒÃÇ½è¼øÁË Mike Ash ÔÚËûµÄÏîÄ¿?Circle?ÖÐʹÓõķ½·¨À´´¦Àí blocks£¬Õâ¸ö·½°¸Ò²Æô·¢ÁËÎÒÃÇ¿ª·¢ÁË FBRetainCycleDetector¡£

ÕâÀïÎÒÃÇÔËÓõ½ÁË ABI £¨application binary interface for blocks£©¡£Ëü¸æËßÎÒÃÇ block ÔÚÄÚ´æÖÐÊÇÒÔÔõÑùµÄÐÎʽ´æÔڵġ£Èç¹ûÎÒÃÇÖªµÀÎÒÃÇÔÚ´¦ÀíµÄÒýÓÃÊÇÒ»¸ö block µÄ»°£¬ÄÇôÎÒÃÇ¿ÉÒÔ½«Æäת»¯ÎªÒ»¸ö¼ÙµÄÄ£Äâ block µÄ struct ¶ÔÏó¡£ÔÚ½« block ת»¯Îª struct Ö®ºó£¬ÎÒÃǾÍÄܹ»ÖªµÀËüËù³ÖÓеÄÄÚ´æ¶ÔÏóÁË¡£µ«ÊDz»ÐÒµØÊÇ£¬ÎÒÃDz¢²»ÖªµÀÕâЩÒýÓùØÏµÊÇÇ¿ÒýÓû¹ÊÇÈõÒýÓá£

ÎÒÃÇÓÃÁ˺ںм¼ÊõÀ´½â¾öÕâ¸öÎÊÌâ¡£ÎÒÃÇ´´½¨ÁËÒ»¸ö¼Ù×°ÊÇÎÒÃÇÒªÅŲéµÄ block µÄ¶ÔÏó£¬ÇÒÎÒÃÇÖªµÀ block µÄ½Ó¿Ú½á¹¹£¬ÒÔ¼°µ½ÄÄÈ¥ÕÒ block Ëù³ÖÓеÄÒýÓ᣶øÔÚÎÒÃÇ¡°Î±ÔìµÄ¡± block ¶ÔÏóÖУ¬²¢Ã»ÓÐʵ¼Ê³ÖÓÐÒýÓ㬶øÊdzÖÓÐÁË¡°ÊÍ·Å̽²âÆ÷¡±£¨release detectors£©¡£ÊÍ·Å̽²âÆ÷ÊÇһЩÓÃÀ´¼àÌý·¢Ë͸øËûÃǵÄÄÚ´æÊÍ·ÅÏûÏ¢µÄС¶ÔÏó¡£µ±Ò»¸ö¶ÔÏóÒª½â³ýÒýÓùØÏµµÄʱºò£¬Ëü»áÏñÆä³ÖÓеÄÇ¿ÒýÓöÔÏó·¢ËÍÄÚ´æÊͷŵÄÏûÏ¢¡£ËùÒÔ£¬ÎÒÃÇ¿ÉÒÔÔÚÊÍ·Å¡°Î±ÔìµÄ¡± block ¶ÔÏóµÄʱºò£¬¼ì²éÒ»ÏÂÄĸö̽²âÆ÷ÊÕµ½ÁËÄÚ´æÊͷŵÄÏûÏ¢£¬ÕâЩÊÕµ½ÏûÏ¢µÄ̽²âÆ÷£¬¼´´æÔÚÇ¿ÒýÓùØÏµ£¬ÕâÑù¾Í¿ÉÒÔ°ïÖúÎÒÃÇÕÒ³öÕæÊµµÄ block ¶ÔÏóÖÐËù³ÖÓеĶÔÏóÒýÓÃÁË¡£

×Ô¶¯»¯

Õâ¸öÄÚ´æ¼ì²â¹¤¾ßÔÚÎÒÃÇÈÕ³£³ÖÐø²»¶ÏµØµü´ú¹¹½¨¿ª·¢ÖУ¬²»Í£µØ·¢¹â·¢Èȹ±Ï××Å×Ô¼ºµÄÒ»·ÝÁ¦¡£

ÔÚ¿Í»§¶ËÉϵÄ×Ô¶¯»¯·Ç³£µØ¼òµ¥¡£ÎÒÃÇÔÚ×Ô¼ºµÄ App ÀïÌí¼ÓÁË Retain Cycle Detector µÄÒÀÀµ£¬²¢ÖÜÆÚÐÔµØÉ¨ÃèÄÚ´æÆ¬¶ÎÀ´¼ì²âÑ­»·ÒýÓᣵ±È»£¬ËüÒ²²¢²»ÊÇÍêèµÎÞ覵ġ£µ±ÎÒÃǵÚÒ»´ÎÔËÐÐ Retain Cycle Detector µÄʱºò£¬ÎÒÃǾÍÒâʶµ½ÁËËüÊÇÎÞ·¨·Ç³£¿ìµØÉ¨ÃèÕû¸öÄÚ´æÊ¹Óõģ¬ÎÒÃÇÐèҪΪËüÌṩһЩɸѡ¹ýºóµÄÄÚ´æ¶ÔÏóÀ´ÈÃËü½øÐмì²â¡£

ΪÁ˸üÓÐЧµØ½øÐжÔÏóɸѡ£¬ÎÒÃÇ¿ª·¢ÁË FBAllocationTracker¡£ÕâÊÇÒ»¸öÓÃÀ´Ö÷¶¯×·×ÙËùÓÐ NSObject µÄ×ÓÀàµÄÄÚ´æ·ÖÅäºÍÊͷŲÙ×÷µÄ¹¤¾ß¡£Ëü¿ÉÒÔÔÚ×îСµÄÐÔÄÜÏûºÄÏ£¬ÔÚ¸ø¶¨µÄʱ¼äµã¿ìËÙ»ñÈ¡ÈκÎÀàµÄÈκÎʵÀý¡£

ÔÚ¿Í»§¶ËÉÏ×Ô¶¯½øÐÐÄÚ´æÐ¹Â©¼à²âʵ¼ÊÉϾÍÊÇÅäºÏʹÓà FBRetainCycleDetector ¼Ó¶¨Ê±Æ÷£¬ÔÙ¼ÓÉÏ¿ÉÒÔΪÎÒÃÇɸѡ¼ì²â¶ÔÏóµÄ FBAllocationTracker¡£

ÏÖÔÚÈÃÎÒÃÇÀ´¿´Ïºó¶ËÐèÒª×öÄÄÐ©ÌØ±ðµÄ´¦Àí¡£

Ñ­»·ÒýÓÿÉÒÔÓÉÈÎÒâÊýÁ¿µÄ¶à¸ö¶ÔÏó×é³É¡£µ«Êǵ±³öÏÖÁËÒ»¸ö»µÁ´½Ó¶øµ¼Ö³öÏÖ¶à¸öÑ­»·Ê±£¬ÊÂÇé¾Í±äµÃ¸´ÔÓÆðÀ´ÁË¡£

A¡úB is a bad link in a cycle, and two kinds of cycles are created because of that: A-B-C-D and A-B-C-E.

Õâ»áµ¼ÖÂÁ½¸öÎÊÌ⣺

Èç¹ûÊÇÒòΪһ¸ö»µÁ´½Óµ¼ÖµÄÁ½¸öÑ­»·ÒýÓã¬ÎÒÃDz¢²»Ïë°ÑËûÃÇ·Ö¿ª±ê¼Ç³öÀ´

Èç¹ûÕæµÄÊÇÁ½¸öÑ­»·ÒýÓÃÎÊÌ⣬¼´±ãÊǹ²ÏíÁËÒ»¸öÁ´½Ó£¬ÎÒÃÇÒ²²»Ïë°ÑËûÃDZê¼ÇÔÚÒ»Æð

Òò´Ë£¬ÎÒÃÇÐèÒª¶ÔÑ­»·ÒýÓýøÐйéÀ࣬Ϊ´ËÎÒÃÇҲдÁËÒ»¸öËã·¨À´Æô·¢Ê½µØ°ïÖúÎÒÃÇ´¦ÀíÕâ¸öÎÊÌ⣺

½«Í¬Ò»Ìì¼ì²âµ½µÄÑ­»·ÒýÓùéÀà

¶Ôÿһ¸öÑ­»·ÒýÓã¬ÌáÈ¡³ö Facebook ÌØÓеÄÀàÃû

¶Ôÿһ¸öÑ­»·ÒýÓã¬ÕÒµ½ÆäÖÐÒѾ­±»Éϱ¨¹ýµÄ¡¢²¢°üº¬ÔÚÆäÖеÄ×îС»·

½«Ã¿¸öÑ­»·ÒýÓÃÌí¼Óµ½ÉÏÊö×îС»·Ëù±íʾµÄ×éÖÐ

Ö»¶Ô×îС»·½øÐÐÉϱ¨

×öÍêÉÏÊöµÄ´¦ÀíÖ®ºó£¬×îºóÒª×öµÄÊÂÇé¾ÍÊÇÕÒµ½Äĸö¹¤³Ìʦ¸Ä¶¯ÁË´úÂëµ¼ÖÂÁËÄÚ´æÐ¹Â©µÄ·¢Éú¡£ÎÒÃÇͨ¹ý ¡®git/hg blame¡¯ ÅäºÏÑ­»·ÒýÓÃÖеIJ¿·Ö´úÂ룬À´ÍƲâ³ö¿ÉÄÜÊÇij¸ö¹¤³ÌʦµÄ¸Ä¶¯µ¼ÖµÄÎÊÌâ·¢Éú£¬²¢ÔÚÄÚ²¿µÄ°ì¹«ÏµÍ³ÖÐ¶ÔÆä·¢³ö֪ͨ£¬ÈÃËû¾¡¿ìÐÞ¸´Õâ¸öÎÊÌâ¡£

Õû¸ö×Ô¶¯»¯ÏµÍ³¿ÉÒÔͨ¹ýÏÂÃæµÄͼÐνøÐбíʾ£º

È˹¤¼ì²â

ËäÈ»×Ô¶¯»¯µÄ·½Ê½°ïÖúÎÒÃǼò»¯ÁËÑ­»·ÒýÓõÄÅŲ飬Ҳ¼õÇáÁËÎÒÃǹ¤³ÌʦµÄ¸ºµ££¬µ«ÊÇÈ˹¤ÅŲéÈÔÈ»¾ßÓв»¿ÉÌæ´úµÄ×÷Óá£Îª´Ë£¬ÎÒÃÇ»¹¿ª·¢ÁË FBMemoryProfiler À´ÈÃÈκÎÈ˶¼¿ÉÒÔÔÚ²»°Ñ iPhone Á¬½Óµ½µçÄÔµÄÇé¿öÏ£¬Ò²¿ÉÒÔµ±Ç° App µÄÄÚ´æÊ¹ÓÃÇé¿ö¡£

FBMemoryProfiler ¿ÉÒÔͨ¹ýºÜ¼òµ¥µÄ·½Ê½¾ÍÌí¼Óµ½ÈκΠApp ÖУ¬ÈÃÄã¾ß±¸Ö±½ÓÔÚ App Öв鿴ÄÚ´æÊ¹ÓÃÇé¿ö£¬²¢ÊÖ¶¯¼ì²éÑ­»·ÒýÓõÄÄÜÁ¦¡£FBMemoryProfiler ÒÀÀµÁË FBAllocationTracker ºÍ FBRetainCycleDetector À´ÊµÏÖÕâЩ¹¦ÄÜ¡£

ÕâÀïÓиöÊÓÆµ - Ð跭ǽ

Generations£¨´ú£©

FBMemoryProfiler ÌṩµÄÁíÒ»¸ö·Ç³£ºÃÓõŦÄÜÊÇ¡°´ú×·×Ù¡±£¨generation tracking£©£¬ÀàËÆÓÚ Xcode ÌṩµÄ Instruments ÀïµÄ´ú×·×ٵŦÄÜ¡£¡°´ú¡±£¨Generation£©¿ÉÒÔÈÏΪÊÇÁ½¸öʱ¼äÇÐÆ¬Ö®¼äËùÓдæÔÚµÄÄÚ´æ¶ÔÏóµÄ¿ìÕÕ£¨snapshots£©¡£

¾Ù¸öÀõ×Ó£¬Í¨¹ý FBMemoryProfiler ÌṩµÄ UI Äã±ê¼ÇÁËÒ»´Îʱ¼äµã£¬Õâʱ·ÖÅäÁËÈý¸öÄÚ´æ¶ÔÏó¡£È»ºóÄã±ê¼ÇÁËÁíÒ»¸öʱ¼äµã£¬Í¬Ê±Ò²¼ÌÐø·ÖÅäÄÚ´æ¶ÔÏó¡£µÚÒ»¸öʱ¼äµãµÄÄÚ´æÖÐÖ»°üº¬ÁËÎÒÃÇ×ʼµÄÈý¸öÄÚ´æ¶ÔÏó¡£Èç¹ûÆäÖÐÈκÎÒ»¸ö¶ÔÏó±»ÊÍ·ÅÁË£¬ÄÇôËü¾Í²»»á´æÔÚµÚ¶þ¸öʱ¼äµãµÄÄÚ´æÇÐÆ¬ÖС£

µ±ÎÒÃÇÐèÒª×öÒ»Ð©ÖØ¸´µÄ¶¯×÷µÄʱºò£¬´ú×·×ÙÕâ¸ö¹¦ÄÜÊǷdz£ÓÐÓõġ£¾Ù¸öÀõ×Ó£¬±ÈÈçÎÒÃÇÐèÒª·´¸´½ø³öij¸ö View Controller µÄʱºò¡£ÎÒÃÇÿ´Î¶¼ÔÚ½øÈë View Controller ֮ǰ±ê¼ÇÒ»ÏÂÄÚ´æ¿ìÕÕ£¬È»ºó×Ðϸ¹Ø×¢Ò»ÏÂÿ´ÎÄÚ´æ¿ìÕÕ¶¼ÓÐÄÄЩ¶ÔÏóʣϡ£Èç¹ûÓиö¶ÔÏó´æÔÚµÄʱ¼ä³¬³öÁËËüÔ­±¾µÄÔ¤ÆÚµÄ»°£¬ÎÒÃǾͿÉÒԷdz£Ö±¹ÛµØ´Ó FBMemoryProfiler ÉÏ¿´µ½¡£

À´ÊÔÊÔ¿´°É

²»ÂÛÄãÊǾÞÎÞ°Ô App »¹ÊÇÒ»¸öСÐÍÓ¦Óã¬Á¼ºÃµÄÄÚ´æ¹ÜÀí¶¼ÊÇÒ»¸öºÃµÄ¹¤³Ìϰ¹ß¡£Í¨¹ýÕâЩ¹¤¾ßµÄ°ïÖú£¬ÎÒÃÇÄܹ»¸üΪ±ã½ÝµØÈ¥·¢ÏÖºÍÐÞ¸´ÄÚ´æÐ¹Â©µÄÎÊÌ⣬ÈÃÎÒÃÇÊ¡ÏÂÄÇЩȥÊÖ¶¯¼ì²âµÄʱ¼ä£¬¸ü¼Ó¾Û½¹ÔÚд³ö¸üºÃµÄ´úÂëÉÏ¡£ÎÒÃÇҲϣÍûÄãÄܹ»´ÓÕâЩ¹¤¾ßÀïµÃµ½°ïÖú¡£À´ Github ÉϸøÎÒÃǼӸö star °É£ºFBRetainCycleDetector£¬FBAllocationTracker?ºÍ?FBMemoryProfiler¡£

   
2139 ´Îä¯ÀÀ       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ÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ