¸üÐÂʱ¼ä:2016Äê03ÔÂ04ÈÕ17ʱ55·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
¡¡¡¡Ò»¡¢Ôõô±£Ö¤¶àÈË¿ª·¢½øÐÐÄÚ´æÐ¹Â¶µÄ¼ì²é¡£
¡¡¡¡• ʹÓÃAnalyze½øÐдúÂëµÄ¾²Ì¬·ÖÎö
¡¡¡¡• Ϊ±ÜÃâ²»±ØÒªµÄÂé·³, ¶àÈË¿ª·¢Ê±¾¡Á¿Ê¹ÓÃARC
¡¡¡¡¶þ¡¢·Ç×Ô¶¯ÄÚ´æ¹ÜÀíÇé¿öÏÂÔõô×öµ¥Àýģʽ¡£
¡¡¡¡´´½¨µ¥ÀýÉè¼ÆÄ£Ê½µÄ»ù±¾²½Ö裺
¡¡¡¡>ÉùÃ÷Ò»¸öµ¥¼þ¶ÔÏóµÄ¾²Ì¬ÊµÀý,²¢³õʼ»¯Îªnil£»
¡¡¡¡>´´½¨Ò»¸öÀàµÄÀ๤³§·½·¨,µ±ÇÒ½öµ±Õâ¸öÀàµÄʵÀýΪnilʱÉú³ÉÒ»¸ö¸ÃÀàµÄʵÀý£»
¡¡¡¡>ʵÏÖNScopyingÐÒé, ¸²¸ÇallocWithZone:·½·¨,È·±£Óû§ÔÚÖ±½Ó·ÖÅäºÍ³õʼ»¯¶ÔÏóʱ,²»»á²ú ÉúÁíÒ»¸ö¶ÔÏó£»
¡¡¡¡>¸²¸Çrelease¡¢autorelease¡¢retain¡¢retainCount·½·¨, ÒÔ´ËÈ·±£µ¥ÀýµÄ״̬£»
¡¡¡¡>ÔÚ¶àÏ̵߳Ļ·¾³ÖÐ,×¢ÒâʹÓÃ@synchronized¹Ø¼ü×Ö»òGCD,È·±£¾²Ì¬ÊµÀý±»ÕýÈ·µÄ´´½¨ºÍ³õʼ»¯¡£
¡¡¡¡Èý¡¢¶ÔÓÚÀà·½·¨(¾²Ì¬·½·¨)ĬÈÏÊÇautoreleaseµÄ¡£ËùÓÐÀà·½·¨¶¼»áÕâÑùÂð?
¡¡¡¡1> ϵͳ×Ô´øµÄ¾ø´óÊýÀà·½·¨·µ»ØµÄ¶ÔÏó,¶¼ÊǾ¹ýautoreleaseµÄ¡£
¡¡¡¡ËÄ¡¢blockÔÚARCÖкÍMRCÖеÄÓ÷¨ÓÐÊ²Ã´Çø±ð,ÐèҪעÒâʲô£¿
¡¡¡¡1.¶ÔÓÚûÓÐÒýÓÃÍⲿ±äÁ¿µÄBlock£¬ÎÞÂÛÔÚARC»¹ÊÇ·ÇARCÏ£¬ÀàÐͶ¼ÊÇ__NSGlobalBlock__£¬ÕâÖÖÀàÐ͵Äblock¿ÉÒÔÀí½â³ÉÒ»ÖÖÈ«¾ÖµÄblock£¬²»ÐèÒª¿¼ÂÇ×÷ÓÃÓòÎÊÌ⡣ͬʱ£¬¶ÔËû½øÐÐCopy»òÕßRetain²Ù×÷Ò²ÊÇÎÞЧµÄ£»
¡¡¡¡2.ӦעÒâ±ÜÃâÑ»·ÒýÓá£
¡¡¡¡Î塢ʲôÇé¿öÏ»ᷢÉúÄÚ´æÐ¹Â©ºÍÄÚ´æÒç³ö?
¡¡¡¡µ±³ÌÐòÔÚÉêÇëÄÚ´æºó£¬ÎÞ·¨ÊÍ·ÅÒÑÉêÇëµÄÄÚ´æ¿Õ¼ä(ÀýÈçÒ»¸ö¶ÔÏó»òÕß±äÁ¿Ê¹ÓÃÍê³ÉºóûÓÐÊÍ·Å,Õâ¸ö¶ÔÏóÒ»Ö±Õ¼ÓÃ×ÅÄÚ´æ)£¬Ò»´ÎÄÚ´æÐ¹Â¶Î£º¦¿ÉÒÔºöÂÔ£¬µ«ÄÚ´æÐ¹Â¶¶Ñ»ýºó¹ûºÜÑÏÖØ£¬ÎÞÂÛ¶àÉÙÄÚ´æ,³ÙÔç»á±»Õ¼¹â¡£ÄÚ´æÐ¹Â¶»á×îÖջᵼÖÂÄÚ´æÒç³ö!
¡¡¡¡µ±³ÌÐòÔÚÉêÇëÄÚ´æÊ±£¬Ã»ÓÐ×ã¹»µÄÄÚ´æ¿Õ¼ä¹©ÆäʹÓ㬳öÏÖout of memory;±ÈÈçÉêÇëÁËÒ»¸öint,µ«¸øËü´æÁËlong²ÅÄÜ´æÏµÄÊý£¬ÄǾÍÊÇÄÚ´æÒç³ö¡£
¡¡¡¡Áù¡¢[NSArrayarrayWithobject:] Õâ¸ö·½·¨Ìí¼Ó¶ÔÏóºó£¬ÐèÒª¶ÔÕâ¸öÊý×é×öÊͷŲÙ×÷Âð?
¡¡¡¡²»ÐèÒª Õâ¸ö¶ÔÏ󱻷ŵ½×Ô¶¯ÊͷųØÖС£
¡¡¡¡Æß¡¢JsonÊý¾ÝµÄ½âÎö?
¡¡¡¡• JSON½âÎöµÄ·½°¸?
¡¡¡¡1¡¢SBJson?£»
¡¡¡¡2¡¢JSONkit?£»
¡¡¡¡3¡¢NSJSONSerialization?¡£
¡¡¡¡°Ë¡¢×Ô¶¯ÊͷųصײãÔõôʵÏÖ£¿
¡¡¡¡×Ô¶¯ÊͷųØÒÔÕ»µÄÐÎʽʵÏÖ:µ±Äã´´½¨Ò»¸öеÄ×Ô¶¯ÊͷųØÊ±£¬Ëü½«±»Ìí¼Óµ½Õ»¶¥¡£µ±Ò»¸ö¶ÔÏóÊÕµ½·¢ËÍautoreleaseÏûϢʱ,Ëü±»Ìí¼Óµ½µ±Ç°Ï̵߳Ĵ¦ÓÚÕ»¶¥µÄ×Ô¶¯ÊͷųØÖÐ,µ±×Ô¶¯Êͷųر»»ØÊÕʱ,ËüÃÇ´ÓÕ»Öб»É¾³ý, ²¢ÇÒ»á¸ø³Ø×ÓÀïÃæËùÓеĶÔÏó¶¼»á×öÒ»´Îrelease²Ù×÷¡£
¡¡¡¡¾Å¡¢×Ô¶¯ÊͷųØÊÇʲô,ÈçºÎ¹¤×÷£¿
¡¡¡¡µ±ÄúÏòÒ»¸ö¶ÔÏó·¢ËÍÒ»¸öautoreleaseÏûϢʱ£¬Cocoa¾Í»á½«¸Ã¶ÔÏóµÄÒ»¸öÒýÓ÷ÅÈëµ½×îеÄ×Ô¶¯Êͷųء£ËüÈÔÈ»ÊǸöÕýµ±µÄ¶ÔÏó£¬Òò´Ë×Ô¶¯Êͷųض¨ÒåµÄ×÷ÓÃÓòÄ򵀮äËü¶ÔÏó¿ÉÒÔÏòËü·¢ËÍÏûÏ¢¡£µ±³ÌÐòÖ´Ðе½×÷ÓÃÓò½áÊøµÄλÖÃʱ£¬×Ô¶¯ÊͷųؾͻᱻÊÍ·Å£¬³ØÖеÄËùÓжÔÏóÒ²¾Í±»ÊÍ·Å¡£
¡¡¡¡1. ojc-c ÊÇͨ¹ýÒ»ÖÖ"referring counting"(ÒýÓüÆÊý)µÄ·½Ê½À´¹ÜÀíÄÚ´æµÄ, ¶ÔÏóÔÚ¿ªÊ¼·ÖÅäÄÚ´æ(alloc)µÄʱºòÒýÓüÆÊýΪһ,ÒÔºóÿµ±Åöµ½ÓÐcopy,retainµÄʱºòÒýÓüÆÊý¶¼»á¼ÓÒ», ÿµ±Åöµ½releaseºÍautoreleaseµÄʱºòÒýÓüÆÊý¾Í»á¼õÒ»,Èç¹û´Ë¶ÔÏóµÄ¼ÆÊý±äΪÁË0, ¾Í»á±»ÏµÍ³Ïú»Ù¡£
¡¡¡¡2. NSAutoreleasePool ¾ÍÊÇÓÃÀ´×öÒýÓüÆÊýµÄ¹ÜÀí¹¤×÷µÄ,Õâ¸ö¶«Î÷Ò»°ã²»ÓÃÄã¹ÜµÄ¡£
¡¡¡¡3. autoreleaseºÍreleaseÃ»Ê²Ã´Çø±ð,Ö»ÊÇÒýÓüÆÊý¼õÒ»µÄʱ»ú²»Í¬¶øÒÑ,autorelease»áÔÚ¶ÔÏóµÄʹÓÃÕæÕý½áÊøµÄʱºò²Å×öÒýÓüÆÊý¼õÒ»¡£
¡¡¡¡Ê®¡¢Objective-CÈçºÎ¶ÔÄÚ´æ¹ÜÀíµÄ,˵˵ÄãµÄ¿´·¨ºÍ½â¾ö·½·¨?
¡¡¡¡Objective-CµÄÄÚ´æ¹ÜÀíÖ÷ÒªÓÐÈýÖÖ·½Ê½ARC(×Ô¶¯ÄÚ´æ¼ÆÊý)¡¢ÊÖ¶¯ÄÚ´æ¼ÆÊý¡¢ÄÚ´æ³Ø¡£
¡¡¡¡1¡¢(Garbage Collection)×Ô¶¯ÄÚ´æ¼ÆÊý£ºÕâÖÖ·½Ê½ºÍjavaÀàËÆ£¬ÔÚÄãµÄ³ÌÐòµÄÖ´Ðйý³ÌÖС£Ê¼ÖÕÓÐÒ»¸ö¸ßÈËÔÚ±³ºó׼ȷµØ°ïÄãÊÕʰÀ¬»ø£¬Äã²»Óÿ¼ÂÇËüʲôʱºò¿ªÊ¼¹¤×÷£¬ÔõÑù¹¤×÷¡£ÄãÖ»ÐèÒªÃ÷°×£¬ÎÒÉêÇëÁËÒ»¶ÎÄÚ´æ¿Õ¼ä£¬µ±ÎÒ²»ÔÙʹÓôӶøÕâ¶ÎÄÚ´æ³ÉΪÀ¬»øµÄʱºò£¬ÎҾͳ¹µ×µÄ°ÑËüÍü¼Çµô£¬·´ÕýÄǸö¸ßÈË»á°ïÎÒÊÕʰÀ¬»ø¡£Òź¶µÄÊÇ£¬ÄǸö¸ßÈËÐèÒªÏûºÄÒ»¶¨µÄ×ÊÔ´£¬ÔÚЯ´øÉ豸ÀïÃæ£¬×ÊÔ´ÊǽôÇÎÉÌÆ·ËùÒÔiPhone²»Ö§³ÖÕâ¸ö¹¦ÄÜ¡£ËùÒÔ“Garbage Collection”²»ÊDZ¾ÈëÃÅÖ¸Äϵķ¶Î§£¬¶Ô“GarbageCollection”ÄÚ²¿»úÖÆ¸ÐÐËȤµÄͬѧ¿ÉÒԲο¼Ò»Ð©ÆäËûµÄ×ÊÁÏ£¬²»¹ý˵ÀÏʵ»° “GarbageCollection”²»´óÊʺÏÊʳõѧÕßÑо¿¡£
¡¡¡¡½â¾ö£ºÍ¨¹ýalloc– initial·½Ê½´´½¨µÄ, ´´½¨ºóÒýÓüÆÊý+1, ´ËºóÿretainÒ»´ÎÒýÓüÆÊý+1,ÄÇôÔÚ³ÌÐòÖÐ×öÏàÓ¦´ÎÊýµÄrelease¾ÍºÃÁË¡£
¡¡¡¡2¡¢(Reference Counted)ÊÖ¶¯ÄÚ´æ¼ÆÊý£º¾ÍÊÇ˵£¬´ÓÒ»¶ÎÄÚ´æ±»ÉêÇëÖ®ºó£¬¾Í´æÔÚÒ»¸ö±äÁ¿ÓÃÓÚ±£´æÕâ¶ÎÄڴ汻ʹÓõĴÎÊý£¬ÎÒÃÇÔÝʱ°ÑËü³ÆÎª¼ÆÊýÆ÷£¬µ±¼ÆÊýÆ÷±äΪ0µÄʱºò£¬ÄÇô¾ÍÊÇÊÍ·ÅÕâ¶ÎÄÚ´æµÄʱºò¡£±ÈÈç˵£¬µ±ÔÚ³ÌÐòAÀïÃæÒ»¶ÎÄÚ´æ±»³É¹¦ÉêÇëÍê³ÉÖ®ºó£¬ÄÇôÕâ¸ö¼ÆÊýÆ÷¾Í´Ó0±ä³É1(ÎÒÃǰÑÕâ¸ö¹ý³Ì½Ð×öalloc)£¬È»ºó³ÌÐòBÒ²ÐèҪʹÓÃÕâ¸öÄڴ棬ÄÇô¼ÆÊýÆ÷¾Í´Ó1±ä³ÉÁË2(ÎÒÃǰÑÕâ¸ö¹ý³Ì½Ð×öretain)¡£½ô½Ó×ųÌÐòA²»ÔÙÐèÒªÕâ¶ÎÄÚ´æÁË£¬ÄÇô³ÌÐòA¾Í°ÑÕâ¸ö¼ÆÊýÆ÷¼õ1(ÎÒÃǰÑÕâ¸ö¹ý³Ì½Ð×örelease);³ÌÐòBÒ²²»ÔÙÐèÒªÕâ¶ÎÄÚ´æµÄʱºò£¬ÄÇôҲ°Ñ¼ÆÊýÆ÷¼õ1(Õâ¸ö¹ý³Ì»¹ÊÇrelease)¡£µ±ÏµÍ³(Ò²¾ÍÊÇ Foundation)·¢ÏÖÕâ¸ö¼ÆÊýÆ÷±ä³ÉÁË0£¬ÄÇô¾Í»áµ÷ÓÃÄÚ´æ»ØÊÕ³ÌÐò°ÑÕâ¶ÎÄÚ´æ»ØÊÕ(ÎÒÃǰÑÕâ¸ö¹ý³Ì½Ð×ödealloc)¡£Ë³±ãÌáÒ»¾ä£¬Èç¹ûûÓÐ Foundation£¬ÄÇôά»¤¼ÆÊýÆ÷£¬ÊÍ·ÅÄÚ´æµÈµÈ¹¤×÷ÐèÒªÄãÊÖ¹¤À´Íê³É¡£
¡¡¡¡½â¾ö£ºÒ»°ãÊÇÓÉÀàµÄ¾²Ì¬·½·¨´´½¨µÄ, º¯ÊýÃûÖв»»á³öÏÖalloc»òinit×ÖÑù, Èç[NSStringstring]ºÍ[NSArray arrayWithObject:], ´´½¨ºóÒýÓüÆÊý+0,ÔÚº¯Êý³öÕ»ºóÊÍ·Å, ¼´Ï൱ÓÚÒ»¸öÕ»Éϵľֲ¿±äÁ¿. µ±È»Ò²¿ÉÒÔͨ¹ýretainÑÓ³¤¶ÔÏóµÄÉú´æÆÚ¡£
¡¡¡¡3¡¢(NSAutoRealeasePool)ÄÚ´æ³Ø£º¿ÉÒÔͨ¹ý´´½¨ºÍÊÍ·ÅÄÚ´æ³Ø¿ØÖÆÄÚ´æÉêÇëºÍ»ØÊÕµÄʱ»ú¡£
¡¡¡¡½â¾ö:ÊÇÓÉautorelease¼ÓÈëϵͳÄÚ´æ³Ø,ÄÚ´æ³ØÊÇ¿ÉÒÔǶÌ×µÄ, ÿ¸öÄÚ´æ³Ø¶¼ÐèÒªÓÐÒ»¸ö´´½¨ÊͷŶÔ, ¾ÍÏñmainº¯ÊýÖÐдµÄÒ»Ñù. ʹÓÃÒ²ºÜ¼òµ¥,±ÈÈç[[[NSString alloc]initialWithFormat”Hey you!”] autorelease], ¼´½«Ò»¸öNSString¶ÔÏó¼ÓÈëµ½×îÄÚ²ãµÄϵͳÄÚ´æ³Ø, µ±ÎÒÃÇÊÍ·ÅÕâ¸öÄÚ´æ³ØÊ±, ÆäÖеĶÔÏ󶼻ᱻÊÍ·Å¡£
¡¡¡¡Ê®Ò»¡¢ÐèÒªÔÚÊÖ¶¯¹ÜÀíÄÚ´æ·ÖÅäºÍÊͷŵÄXcodeÏîÄ¿ÖÐÒýÈëºÍ±àÒëÓÃARC·ç¸ñ±àдµÄÎļþ£¬ÐèÒªÔÚÎļþµÄCompilerFlagsÉÏÌí¼Ó²ÎÊý¡£
IOSÅàѵʵս½Ì³ÌÖ®¿ª·¢µÄ22¸öÆæÝâ¼¼ÇÉ
2016-01-27IOSÅàѵʵս½Ì³ÌÖ®½« Objective-C ´úÂëÇ¨ÒÆµ½ Swift
2015-12-29IOSÅàѵʵս½Ì³ÌÖ®ºÎʱʹÓÃSwift StructsºÍClasses
2015-12-29IOSÅàѵʵս½Ì³ÌÖ®¿ª·¢´úÂë¹æ·¶
2015-12-29IOSÅàѵʵս½Ì³ÌÖ®iOS9ÐÂϵͳÏÂAPP Store Ó¦ÓÃÉÏ´«ÐÂÖ¸ÄÏ
2015-12-29IOSÅàѵʵս½Ì³ÌÖ®iOS Xcode²¿ÊðÅäÖÃ
2015-12-28
±±¾©Ð£Çø