µ¼Óï
±¾ÎĽéÉÜÁËÈçºÎÓÅ»¯iOS AppµÄÆô¶¯ÐÔÄÜ¡£
±¾ÎÄ·ÖΪËĸö²¿·Ö£º
µÚÒ»²¿·Ö¿ÆÆÕÁËһЩºÍAppÆô¶¯ÐÔÄÜÏà¹ØµÄǰÖÃ֪ʶ
µÚ¶þ²¿·ÖÖ÷Òª½²ÈçºÎ¶¨ÖÆÆô¶¯ÐÔÄܵÄÓÅ»¯Ä¿±ê
µÚÈý²¿·Öͨ¹ýÔÚWiFi¹Ü¼ÒÕâ¸ö¾ßÌåÏîÄ¿µÄÓÅ»¯¹ý³Ì£¬·ÖÏíһЩÓÐÓõľÑé
µÚËIJ¿·ÖÊǹؼüµãµÄ×ܽᡣ
¡¾µÚÒ»²¿·Ö¡¿Ò»Ð©Ð¡¿ÆÆÕ
ÒòΪƪ·ùµÄÏÞÖÆ£¬Ã»Óа취ºÜÏ꾡µÄ˵Ã÷һЩÔÀíÐԵĶ«Î÷£¬Ö»ÊÇ·½±ã´ó¼ÒÁ˽âÄÄЩÊÂÇé¿ÉÄܸúÆô¶¯ÐÔÄÜÓйء£Í¬Ê±£¬ÄÚÈÝÏà¶ÔÒ²±È½ÏÈëÃÅ£¬´óÉñÃÇÇëÌø¹ýÕâÒ»²¿·Ö¡£
1. AppÆô¶¯¹ý³Ì
- ½âÎöInfo.plist
- ¼ÓÔØÏà¹ØÐÅÏ¢£¬ÀýÈçÈçÉÁÆÁ
- ɳÏ佨Á¢¡¢È¨ÏÞ¼ì²é
- Mach-O¼ÓÔØ
- Èç¹ûÊÇÅÖ¶þ½øÖÆÎļþ£¬Ñ°ÕÒºÏÊʵ±Ç°CPUÀà±ðµÄ²¿·Ö
- ¼ÓÔØËùÓÐÒÀÀµµÄMach-OÎļþ£¨µÝ¹éµ÷ÓÃMach-O¼ÓÔØµÄ·½·¨£©
- ¶¨Î»ÄÚ²¿¡¢ÍⲿָÕëÒýÓã¬ÀýÈç×Ö·û´®¡¢º¯ÊýµÈ
- Ö´ÐÐÉùÃ÷Ϊ__attribute__((constructor))µÄCº¯Êý
- ¼ÓÔØÀàÀ©Õ¹£¨Category£©Öеķ½·¨
- C++¾²Ì¬¶ÔÏó¼ÓÔØ¡¢µ÷ÓÃObjCµÄ +load º¯Êý
- ³ÌÐòÖ´ÐÐ
- µ÷ÓÃmain()
- µ÷ÓÃUIApplicationMain()
- µ÷ÓÃapplicationWillFinishLaunching
2. ÈçºÎ²âÁ¿Æô¶¯¹ý³ÌºÄʱ
ÀäÆô¶¯±ÈÈÈÆô¶¯ÖØÒª
µ±Óû§°´ÏÂhome¼üµÄʱºò£¬iOSµÄApp²¢²»»áÂíÉϱ»killµô£¬»¹»á¼ÌÐø´æ»îÈô¸Éʱ¼ä¡£ÀíÏëÇé¿öÏ£¬Óû§µã»÷AppµÄͼ±êÔٴλØÀ´µÄʱºò£¬App¼¸ºõ²»ÐèÒª×öʲô£¬¾Í¿ÉÒÔ»¹Ôµ½Í˳öǰµÄ״̬£¬¼ÌÐøÎªÓû§·þÎñ¡£ÕâÖÖ³ÖÐø´æ»îµÄÇé¿öÏÂÆô¶¯App£¬ÎÒÃdzÆÎªÈÈÆô¶¯£¬Ïà¶Ô¶øÑÔÀäÆô¶¯¾ÍÊÇApp±»killµôÒÔºóÒ»ÇдÓÍ·¿ªÊ¼Æô¶¯µÄ¹ý³Ì¡£ÎÒÃÇÕâÀïÖ»ÌÖÂÛAppÀäÆô¶¯µÄÇé¿ö¡£
main()º¯Êý֮ǰ
ÔÚ²»Ô½ÓüµÄÇé¿öÏ£¬ÒÔÍùºÜÄѾ«È·µÄ²âÁ¿ÔÚmain()º¯Êý֮ǰµÄÆô¶¯ºÄʱ£¬Òò¶øÎÒÃÇÒ²ÍùÍùÈÝÒ׺öÂÔµôÕⲿ·ÖÊý¾Ý¡£Ð¡ÐÍAppȷʵ²»ÐèҪ̫¹ý¹Ø×¢Õⲿ·Ö¡£µ«Èç¹ûÊÇ´óÐÍApp£¨×Ô¶¨ÒåµÄ¶¯Ì¬¿â³¬¹ý50¸ö¡¢»ò±àÒë½á¹û¶þ½øÖÆÎļþ³¬¹ý30MB£©£¬Õⲿ·ÖºÄʱ½«»á±äµÃÍ»³ö¡£ËùÐÒ£¬Æ»¹ûÒѾÔÚXcodeÖмÓÈëÕⲿ·ÖµÄÖ§³Ö¡£
Æ»¹ûÌṩµÄ·½·¨
- ÔÚXcodeµÄ²Ëµ¥ÖÐÑ¡ÔñProject¡úScheme¡úEdit Scheme...£¬È»ºóÕÒµ½ Run ¡ú Environment Variables ¡ú+£¬Ìí¼ÓnameΪDYLD_PRINT_STATISTICSvalueΪ1µÄ»·¾³±äÁ¿¡£

- ÔÚXcodeÔËÐÐAppʱ£¬»áÔÚconsoleÖеõ½Ò»¸ö±¨¸æ¡£ÀýÈ磬ÎÒÔÚWiFi¹Ü¼ÒÖмÓÈëÒÔÉÏÉèÖÃÖ®ºó£¬»áµÃµ½ÕâÑùÒ»¸ö±¨¸æ£º
Total pre-main time: 94.33 milliseconds (100.0%)
dylib loading time: 61.87 milliseconds (65.5%)
rebase/binding time: 3.09 milliseconds (3.2%)
ObjC setup time: 10.78 milliseconds (11.4%)
initializer time: 18.50 milliseconds (19.6%)
slowest intializers :
libSystem.B.dylib : 3.59 milliseconds (3.8%)
libBacktraceRecording.dylib : 3.65 milliseconds (3.8%)
GTFreeWifi : 7.09 milliseconds (7.5%) |
ÈçºÎ½â¶Á
- main()º¯Êý֮ǰ×ܹ²Ê¹ÓÃÁË94.33ms
- ÔÚ94.33msÖУ¬¼ÓÔØ¶¯Ì¬¿âÓÃÁË61.87ms£¬Ö¸ÕëÖØ¶¨Î»Ê¹ÓÃÁË3.09ms£¬ObjCÀà³õʼ»¯Ê¹ÓÃÁË10.78ms£¬¸÷ÖÖ³õʼ»¯Ê¹ÓÃÁË18.50ms¡£
- ÔÚ³õʼ»¯ºÄ·ÑµÄ18.50msÖУ¬ÓÃʱ×î¶àµÄÈý¸ö³õʼ»¯ÊÇlibSystem.B.dylib¡¢libBacktraceRecording.dylibÒÔ¼°GTFreeWifi¡£
main()º¯ÊýÖ®ºó
´Ómain()º¯Êý¿ªÊ¼ÖÁapplicationWillFinishLaunching½áÊø£¬ÎÒÃÇͳһ³ÆÎªmain()º¯ÊýÖ®ºóµÄ²¿·Ö¡£
3. Ó°ÏìÆô¶¯ÐÔÄܵÄÒòËØ
AppÆô¶¯¹ý³ÌÖÐÿһ¸ö²½Öè¶¼»áÓ°ÏìÆô¶¯ÐÔÄÜ£¬µ«ÊÇÓÐЩ²¿·ÖËùÏûºÄµÄʱ¼äÉÙÖ®ÓÖÉÙ£¬ÁíÍâÓÐЩ²¿·Ö¸ù±¾ÎÞ·¨±ÜÃ⣬¿¼Âǵ½Í¶Èë²ú³ö±È£¬ÎÒÃÇÖ»ÁгöÎÒÃÇ¿ÉÒÔÓÅ»¯µÄ²¿·Ö£º
main()º¯Êý֮ǰºÄʱµÄÓ°ÏìÒòËØ
- ¶¯Ì¬¿â¼ÓÔØÔ½¶à£¬Æô¶¯Ô½Âý¡£
- ObjCÀàÔ½¶à£¬Æô¶¯Ô½Âý
- CµÄconstructorº¯ÊýÔ½¶à£¬Æô¶¯Ô½Âý
- C++¾²Ì¬¶ÔÏóÔ½¶à£¬Æô¶¯Ô½Âý
- ObjCµÄ+loadÔ½¶à£¬Æô¶¯Ô½Âý
ʵÑéÖ¤Ã÷£¬ÔÚObjCÀàµÄÊýĿһÑù¶àµÄÇé¿öÏ£¬ÐèÒª¼ÓÔØµÄ¶¯Ì¬¿âÔ½¶à£¬AppÆô¶¯¾ÍÔ½Âý¡£Í¬ÑùµÄ£¬ÔÚ¶¯Ì¬¿âÒ»Ñù¶àµÄÇé¿öÏ£¬ObjCµÄÀàÔ½¶à£¬AppµÄÆô¶¯Ò²Ô½Âý¡£ÐèÒª¼ÓÔØµÄ¶¯Ì¬¿â´Ó1¸öÉÏÉýµ½10¸öµÄʱºò£¬Óû§¼¸ºõ¸ÐÖª²»µ½Èκηֱ𣬵«´Ó10¸öÉÏÉýµ½100¸öµÄʱºò¾Í»á±äµÃÊ®·ÖÃ÷ÏÔ¡£Í¬Àí£¬100¸öÀàºÍ1000¸öÀ࣬¿ÉÄÜÒ²ºÜÄѲé²ì¾õµÃ³ö£¬µ«1000¸öÀàºÍ10000¸öÀàµÄ·Ö±ð¾Í¿ªÊ¼Ã÷ÏÔÆðÀ´¡£
ͬÑùµÄ£¬¾¡Á¿²»ÒªÐ´__attribute__((constructor))µÄCº¯Êý£¬Ò²¾¡Á¿²»ÒªÓõ½C++µÄ¾²Ì¬¶ÔÏó£»ÖÁÓÚObjCµÄ+load·½·¨£¬Ëƺõ´ó¼ÒÒѾϰ¹ß²»ÓÃËüÁË¡£ÈκÎÇé¿öÏ£¬ÄÜÓÃdispatch_once()À´Íê³ÉµÄ£¬¾Í¾¡Á¿²»ÒªÓõ½ÒÔÉϵķ½·¨¡£
main()º¯ÊýÖ®ºóºÄʱµÄÓ°ÏìÒòËØ
- Ö´ÐÐmain()º¯ÊýµÄºÄʱ
- Ö´ÐÐapplicationWillFinishLaunchingµÄºÄʱ
- rootViewController¼°ÆächildViewControllerµÄ¼ÓÔØ¡¢view¼°ÆäsubviewsµÄ¼ÓÔØ
applicationWillFinishLaunchingµÄºÄʱ
Èç¹ûÓÐÕâÑùÕâÑùµÄ´úÂ룺
//AppDelegate.m
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.rootViewController = [[[MQQTabBarController alloc] init] autorelease];
self.window = [[[UIWindow alloc] init] autorelease];
[self.window makeKeyAndVisible];
self.window.rootViewController = self.rootViewController;
UITabBarController *tabBarViewController = [[[UITabBarController alloc] init] autorelease];
NSLog(@"%s", __PRETTY_FUNCTION__);
return YES;
}
...
//MQQTabBarController.m
@implementation MQQTabBarController
- (void)viewDidLoad {
NSLog(@"%s", __PRETTY_FUNCTION__);
[super viewDidLoad];
// Do any additional setup after loading the view.
UIViewController *tab1 = [[[MQQTab1ViewController alloc] init] autorelease];
tab1.tabBarItem.title = @"red";
[self addChildViewController:tab1];
UIViewController *tab2 = [[[MQQTab2ViewController alloc] init] autorelease];
tab2.tabBarItem.title = @"blue";
[self addChildViewController:tab2];
UIViewController *tab3 = [[[MQQTab3ViewController alloc] init] autorelease];
tab3.tabBarItem.title = @"green";
[self addChildViewController:tab3];
}
...
@end |
ÄÇô-[MQQTabBarController viewDidLoad]¡¢ -[AppDelegate application:didFinishLaunchingWithOptions:]¡¢ -[MQQTab1ViewController viewDidLoad]¡¢ -[MQQTab2ViewController viewDidLoad]¡¢ -[MQQTab2ViewController viewDidLoad] Íê³ÉµÄÏȺó˳ÐòÊÇÔõÑùµÄÄØ£¿
´ð°¸ÊÇ£º
-[MQQTabBarController viewDidLoad]
-[MQQTab1ViewController viewDidLoad]
-[AppDelegate application:didFinishLaunchingWithOptions:]
-[MQQTab2ViewController viewDidLoad] £¨µã»÷Á˵ڶþ¸ötabÖ®ºó¼ÓÔØ£©
-[MQQTab3ViewController viewDidLoad] £¨µã»÷Á˵ÚÈý¸ötabÖ®ºó¼ÓÔØ£©
Ò»°ã¶øÑÔ£¬´ó²¿·ÖÇé¿öÏÂÎÒÃǶ¼»á°Ñ½çÃæµÄ³õʼ»¯¹ý³Ì·ÅÔÚviewDidLoad£¬µ«ÊÇÕâ¸ö¹ý³Ì»áÓ°ÏìÏûºÄÆô¶¯µÄʱ¼ä¡£ÌرðÊÇÔÚÀàËÆTabBarControllerÕâÖÖ»áǶÌ×childViewControllerµÄViewControllerµÄÇé¿ö£¬ËüÒ²»á°Ñ²¿·ÖchildrenÒ²³õʼ»¯£¬Òò´Ë¸÷ÖÖviewDidLoad»áµÝ¹éµÄ½øÐС£
×î¼òµ¥µÄ½â¾öµÄ·½·¨£¬ÊǰÑviewControllerÑÓºó¼ÓÔØ£¬µ«Êµ¼ÊÉÏÕâÊôÓÚÒ»ÖÖÑÚ¶úµÁÁ壬ȷʵ£¬applicationWillFinishLaunchingµÄºÄʱÊǽµÏÂÀ´ÁË£¬µ«Óû§ÌåÑéÉϲ¢Ã»Óиоõ±ä¿ì¡£
¸üºÃÒ»µãµÄ½â¾ö·½·¨ÓеãÀàËÆfacebook£¬Ö÷ÊÓͼ»áµÚһʱ¼ä¼ÓÔØ£¬µ«ÀïÃæµÄÊý¾ÝºÍ½çÃæ¶¼»áÑÓºó¼ÓÔØ£¬ÕâÑùÓû§¾Í»á½×¶ÎÐԵĻñµÃÊÓ¾õÉϵı仯£¬´Ó¶øÔÚÊÓ¾õÌåÑéÉϸоõAppÆô¶¯µÃºÜ¿ì¡£

¡¾µÚ¶þ²¿·Ö¡¿ÓÅ»¯µÄÄ¿±ê
ÓÉÓÚÿ¸öAppµÄÇé¿öÓÐËù²»Í¬£¬ÐèÒª¼ÓÔØµÄÊý¾ÝÁ¿Ò²ÓÐËù²»Í¬£¬ÊÂʵÉÏÎÒÃÇÎÞ·¨Ê¹ÓÃÒ»ÖÖͳһµÄ±ê×¼À´ºâÁ¿²»Í¬µÄApp¡£Æ»¹û¡£
- Ó¦¸ÃÔÚ400msÄÚÍê³Émain()º¯Êý֮ǰµÄ¼ÓÔØ
- ÕûÌå¹ý³ÌºÄʱ²»Äܳ¬¹ý20Ã룬·ñÔòϵͳ»ákillµô½ø³Ì£¬AppÆô¶¯Ê§°Ü
400msÄÚÍê³Émain()º¯ÊýǰµÄ¼ÓÔØµÄ½¨ÒéÖµÊÇÔõÑù¶¨³öÀ´µÄÄØ£¿ÆäʵÎÒҲûÓÐÌ«É¹ýÕâ¸öÎÊÌ⣬µ«ÊÇ£¬µ±Óû§µã»÷ÁËÒ»¸öAppµÄͼ±êʱ£¬iOS×ö¶¯»µ½ÉÁÆÁͼ³öÏÖµÄʱ³¤ÕýºÃÊÇÕâ¸öÊý×Ö£¬ÎÒÏëÒ²Ðí¸úÕâ¸öÓйء£
Õë¶Ô²»Í¬¹æÄ£µÄApp£¬ÎÒÃǵÄÄ¿±êÓ¦¸ÃÓÐËùÈ¡Éá¡£ÀýÈ磬¶ÔÓÚÏñÊÖ»úQQÕâÖÖ¼¯Õû¸öSNGµÄ´úÂë´ó³Éߣ³öÀ´µÄApp£¬¶Ô¶¯Ì¬¿âµÄʹÓÃÔÚËùÄÑÃ⣬µ«¶ÔÓÚWiFi¹Ü¼Ò£¬ÓÉÓÚÔÚÓû§Á¬½ÓWiFiµÄʱºòÐèÒª·Ç³£¿ìËÙµÄÏìÓ¦£¬ËùÒÔ¿ìËÙÆô¶¯¾Í·Ç³£ÖØÒª¡£
ÄÇô£¬ÈçºÎ¶¨ÖÆÓÅ»¯µÄÄ¿±êÄØ£¿Ê×ÏÈ£¬ÒªÈ·¶¨Æô¶¯ÐÔÄܵĽçÏÞ£¬ÀýÈ磬ÔÚ¸÷ÖÖAppÐÔÄܵÄÖ¸±êÖУ¬ÄÄÒ»´ËÊôÓÚÆô¶¯ÐÔÄܵķ¶³ë£¬ÄÄһЩÔòÓÚAppµÄÁ÷³©¶ÈÐÔÄÜ£¿ÎÒÈÏΪӦ¸ÃÊ×ÏÈ°ÑÆô¶¯¹ý³Ì·ÖΪËĸö²¿·Ö£º
- main()º¯Êý֮ǰ
- main()º¯ÊýÖ®ºóÖÁapplicationWillFinishLaunchingÍê³É
- AppÍê³ÉËùÓб¾µØÊý¾ÝµÄ¼ÓÔØ²¢½«ÏàÓ¦µÄÐÅϢչʾ¸øÓû§
- AppÍê³ÉËùÓÐÁªÍøÊý¾ÝµÄ¼ÓÔØ²¢½«ÏàÓ¦µÄÐÅϢչʾ¸øÓû§
1+2Ò»Æð¾ö¶¨ÁËÎÒÃÇÐèÒªÓû§µÈ´ý¶à¾Ã²ÅÄܳöÏÖÒ»¸öÖ÷ÊÓͼ£¬Í¬Ê±Ò²ÊǼ¼ÊõÉÏ¿ÉÒÔ¾«È·²âÁ¿µÄʱ³¤£¬1+2+3¾ö¶¨ÁËÓû§ÊÓ¾õÉϵĵȴý³öÏÖÓÐÓÃÐÅÏ¢ËùÐèÒªµÄʱ³¤£¬1+2+3+4¾ö¶¨ÁËÎÒÃÇÐèÒª¶àÉÙʱ¼ä²ÅÄÜÈÃÎÒÃÇÐèҪչʾ¸øÓû§µÄËùÓÐÐÅϢȫ²¿³öÏÖ¡£
ÌÔ±¦µÄiOS¿Í»§¶ËÎÞÒÉÊǸ÷²¿·Ö¶¼×öµÃ·Ç³£ÓÅÐãµÄµäÐÍ¡£ËüËù³ÐÔØµÄÒµÎñÍêÈ«²»±È΢ÐźÍÊÖ»úQQÉÙ£¬µ«¼¸ºõ˲¼äÍê³ÉÁËÆô¶¯£¬²¢ÀûÓûº´æ»úÖÆÊ¹µÃÓû§ÂíÉÏ¿´µ½¡°Ã²ËÆÍêÕû¡±µÄ½çÃæ£¬È»ºóÁ¢¼´ÓÖË¢ÐÂÁ˸ոÕÁªÍø¸üлØÀ´µÄÐÅÏ¢¡£Ò²¾ÍÊÇ˵£¬ÎÞÂÛÊǼ¼ÊõÉÏ»¹ÊÇÊÓ¾õÉÏ£¬Ëü¶¼·Ç³£µÄ¡°¿ì¡±¡£
¡¾µÚÈý²¿·Ö¡¿WiFi¹Ü¼ÒÆô¶¯ÓÅ»¯Êµ¼ù
ÏÈshowһϳɹû£º

1. ÒÆ³ý²»ÐèÒªÓõ½µÄ¶¯Ì¬¿â
ÒòΪWiFi¹Ü¼ÒÊǸöСÏîÄ¿£¬Óõ½µÄ¶¯Ì¬¿â²»¶à£¬×Ô¶¯»¯´¦ÀíµÄÓÅÊÆ²»´ó£¬ÎÒÕâÀïÒ²¾Í¼òµ¥µÄ°ÑÒÀÀµµÄ¶¯Ì¬ÒƳý³öÏîÄ¿£¬ÔÙ¸ù¾Ý±àÒë´íÎóÒ»¸öÒ»¸ö¼Ó»ØÀ´¡£Èç¹ûÓп¿Æ×µÄ·½·¨£¬»¶Ó´ó¼Ò²¹³äһϡ£
2. ÒÆ³ý²»ÐèÒªÓõ½µÄÀà
ÏîÄ¿×ö¾ÃÁË×ÜÓÐһЩµõ¹îµÄÀàÏñÓÄÁéÒ»ÑùÇýÖ®²»È¥£¬ÓÉÓÚ¡¾²»ÒªÏàÐŲúÆ·¾Àí¡¿µÄ˼Ïë×÷¹Ö£¬ÐèÇó±ä¸üºó£¬ÓÐЩÀà¿ÉÄÜÓò»ÉÏÁË£¬µ«È´ÒòΪµ£ÐÄÐèÇóÔÙ±ä»ØÀ´¾ÍûÓÐÒÆ³ýµô£¬ºóÀ´¾Í³¹µ×Íü¼ÇÒªÒÆ³ýÁË¡£
ΪÁ˽â¾öÕâ¸öÀúÊ·ÎÊÌ⣬ÔÚÕâ¸ö¹ý³ÌÖÐÎÒÊÔ¹ý¶àÖÖ·½·¨À´É¨ÃèûÓÐÓõ½µÄÀ࣬ÆäÖÐÓÐÒ»ÖÖÊDZàÒëºó¶ÔObjCÀàµÄÖ¸ÕëÒýÓýøÐз´ÏòɨÃ裬¿Éϧʵ¼ÊÉÏÊÕ»ñ²»ÊǺÜÃ÷ÏÔ£¬¶øÇÒ»¹ÒªÐ´ºÜ¶àÀýÍâ´úÂëÀ´´¦ÀíÒ»Ð©ÌØÊâÇé¿ö¡£ºóÀ´·¢ÏÖÒ»¸ö½Ð×öfui£¨Find Unused Imports£©µÄ¿ªÔ´ÏîÄ¿ÄܺܺõķÖÎö³ö²»ÔÙʹÓõÄÀ࣬׼ȷÂʷdz£¸ß£¬Î¨Ò»µÄÎÊÌâÊÇËü´¦Àí²»Á˶¯Ì¬¿âºÍ¾²Ì¬¿âÀïÌṩµÄÀ࣬Ҳ´¦Àí²»ÁËC++µÄÀàÄ£°å¡£
ʹÓ÷½·¨ÊÇÔÚTerminalÖÐcdµ½ÏîÄ¿ËùÔÚµÄĿ¼£¬È»ºóÖ´ÐÐfui find£¬È»ºóµÈÉÏÄÇô¼¸·ÖÖÓ£¨ÊǵÄÄãûÓп´´í£¬ÕæµÄÐèÒªºÃ¼¸·ÖÖÓÉõÖÁÐèÒª¸ü³¤µÄʱ¼ä£©£¬¾Í¿ÉÒԵõ½Ò»¸öÁбíÁË¡£ÓÉÓÚÕâ¸ö¹¤¾ß»¹²»ÊÇ100%¿¿Æ×£¬¿É¸ù¾ÝÕâ¸öÁÐ±í£¬ÔÚXcodeÖÐÊÖ¶¯¼ì²é²¢É¾³ý²»ÔÙÓõ½µÄÀà¡£
ʵ¼ÊÉÏ£¬ÈÕ³£¶Ô´úÂ빤³ÌµÄά»¤·Ç³£ÖØÒª£¬Èç¹ûÖÆ¶¨ºÃÒ»Ì×°ë·ÏÆú´úÂëµÄά»¤·½·¨£¬Ð¡ÎÊÌâ¾Í²»»á»ýÀ۳ɴóÎÊÌâ¡£ÓÐʱºò¶ÔÓÚһЩÔÝʱ²»ÔÙʹÓõĴúÂ룬ÎÒÒ²ºÜ¾À½áÓÚÒª²»Òªsvn rm£¬ÒòΪ´Ó´úÂëÀúÊ·ÖÐÕÒɾ³ýµôµÄÎļþ»¹ÊDz»Ì«·½±ã¡£²»ÖªµÀ´ó¼ÒÓÐûÓÐÏà¹ØµÄ¾Ñé¿ÉÒÔ·ÖÏí£¬Ò²Çë²»Áߴͽ̡£
3. ºÏ²¢¹¦ÄÜÀàËÆµÄÀàºÍÀ©Õ¹£¨Category£©
ÓÉÓÚCategoryµÄʵÏÖÔÀí£¬ºÍObjCµÄ¶¯Ì¬°ó¶¨ÓкÜÇ¿µÄ¹ØÏµ£¬ËùÒÔʵ¼ÊÉÏÀàµÄÀ©Õ¹ÊDZȽÏÕ¼ÓÃÆô¶¯Ê±¼äµÄ¡£¾¡Á¿ºÏ²¢Ò»Ð©À©Õ¹£¬»á¶ÔÆô¶¯ÓÐÒ»¶¨µÄÓÅ»¯×÷Óᣲ»¹ý¸öÈËÈÏΪҲ²»ÄÜÒòΪËüÕ¼ÓÃÆô¶¯Ê±¼ä¶øÈ¥ÌÓ±ÜʹÓÃÀ©Õ¹£¬±Ï¾¹³ÌÐòÔ±µÄʱ¼ä±ÈCPUµÄʱ¼äֵǮ£¬ÕâÀïÖ»ÊÇÇ¿µ÷ÒªºÏ²¢Ò»Ð©ÔÚ¹¤³Ì¡¢¼Ü¹¹ÉÏûÓÐÌ«´óÒâÒåµÄÀ©Õ¹¡£
4. ѹËõ×ÊԴͼƬ
ѹËõͼƬΪʲôÄܼӿìÆô¶¯ËÙ¶ÈÄØ£¿ÒòΪÆô¶¯µÄʱºò´ó´óССµÄͼƬ¼ÓÔØ¸öÊ®À´¶þÊ®¸öÊǺÜÕý³£µÄ£¬Í¼Æ¬Ð¡ÁË£¬IO²Ù×÷Á¿¾ÍСÁË£¬Æô¶¯µ±È»¾Í»á¿ìÁË¡£
ÊÂʵÉÏ£¬XcodeÔÚ±àÒëAppµÄʱºò£¬ÒѾ×Ô¶¯°ÑÐèÒª´ò°üµ½AppÀïµÄ×ÊԴͼƬѹËõ¹ýÒ»±éÁË¡£È»¶øXcodeµÄѹËõ»áÏà¶Ô±È½Ï±£ÊØ¡£ÁíÒ»·½Ã棬ÎÒÃÇÕý³£µÄÉè¼ÆÊ¦ÓÉÓÚÐèÒª·ûºÏÆäÕý³£µÄÉóÃÀÐèÒªÉú³ÉµÄÕý³£µÄPNGͼƬ£¬Òò´ËͼƬ´óСÊDZȽϴóµÄ£¬È»¶øÈç¹ûÒÔ³ÌÐòÔ±µÄÖ±ÄÐÉóÃÀ¶ø²ÉÓùý¼¤µÄѹËõ»áÖ±½Ó¼¤ÅÉè¼ÆÊ¦¡£
½â¾ö¸÷ÖÖì¶ÜµÄ·½·¨¾ÍÊÇÒªÕÒ³öÒ»ÖÖÏ൱¿¿Æ×µÄѹËõ·½·¨£¬¶øÇÒ×îºÃÊÇ»ù±¾ÎÞËðµÄ£¬¶øÇÒѹËõÂÊ»¹ÒªÌرð¸ß£¬ÖÁÉÙÒª±ÈXcode×Ô¶¯Ñ¹ËõµÄЧ¹ûÒª¸üºÃ²ÅÓÐÒâÒå¡£¾¹ý¸÷ÖÖÊÔÑ飬×îºó·¢ÏÖΨһ¿É¿¿µÄѹËõËã·¨ÊÇTinyPNG£¬ÆäËü¸÷ÖÖ·½·¨£¬ÒªÃ´Ã»Ð§¹û£¬ÒªÃ´²úÉúÉ«²î»òÄ£ºý¡£µ«ÊǷdz£¿ÉϧµÄÊÇTinyPNG²¢²»ÊÇÍêÈ«Ãâ·ÑµÄ£¬¶øÇÒÐèҪͨ¹ýÍøÂçÇëÇóÀ´Ñ¹ËõͼƬ£¨Ó¦¸ÃÊÇΪÁ˱£»¤ÆäÅ£±ÆµÄѹËõËã·¨£©¡£
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒдÁËÒ»¸öÀàÀ´Ö´ÐÐÕâ¸öÇëÇó£¬Çë²Î¼ûÔĶÁÔÎÄÀïµÄSSTinyPNGRequestºÍSSPNGCompressor¡£ÒòΪÕâ¸öÏîĿֻÓÐÎÒÒ»¸öÈËÔÚÓÃËùÒÔ´úÂëдµÃÓеãËæÒ⣬ÓÐÎÊÌâ¿ÉÒÔ˽ÁÄÒ²¿ÉÒÔÔÚÆÀÂÛÀïÎÊ£¬ÓиĽøµÄ·½·¨Ò²·Ç³£»¶ÓÖ¸Õý¡£ÁíÍâ˵Ã÷һϣ¬Ê¹ÓÃÕâ¸öÀàÐèÒªÄã×ÔÐе½ ÕâÀï ÉêÇëAPIKey£¬Ã¿Ò»¸öÓû§Ã¿ÔÂÓÐ500ÕÅͼƬѹËõÊÇÃâ·ÑµÄ£¬¶øÃ¿¸öÓÊÏä¿ÉÒÔ×¢²áÒ»¸öÓû§£¬Äã¶®µÄ¡£
5. ÓÅ»¯applicationWillFinishLaunching
Ëæ×ÅÏîÄ¿×öµÄʱ¼ä³¤ÁË£¬applicationWillFinishLaunchingÀïÒª´¦ÀíµÄ´úÂë»áÔ½»ýÔ½¶à£¬WiFi¹Ü¼ÒµÄiOS°æ±¾ÓÐÒ»¶Îʱ¼äûÓпØÖƺã¬ÀïÃæµÄÂß¼ÂÒµÃÓе㶪ÈË¡£ÒòΪ¿ÉÄÜÉæ¼°µ½Ò»Ð©ÏîÄ¿µÄ°²È«ÐÔÎÊÌ⣬ÕâÀï²»ÄÜ·ÖÏíËùÓеÄÓÅ»¯Ï¸½Ú¼°·¢ÏÖµÄ˼·¡£½öÁгöÔÚapplicationWillFinishLaunchingÖÐÖ÷ÒªÐèÒª´¦ÀíµÄÒµÎñ¼°Ïà¹ØÎÊÌâµÄ¸Ä½ø·½°¸¡£

ÕâÀï´ó²¿·Ö¶¼ÊÇһЩ¿à±Æ»î£¬µ«ÓÐÒ»µãÌØ±ðÖµµÃ·ÖÏíµÄÊÇ£¬ÓÐһЩÓÅ»¯£¬ÊÇÎÞ·¨ÔÚÊý¾ÝÉÏÌåÏֵ쬵«ÊÇÊÓ¾õÉÏÈ´ÄܸøÓû§½Ï´óµÄÌáÉý¡£ÀýÈçÔÚ¡¾¸÷ÖÖÒµÎñÇëÇóÅäÖøüС¿µÄ²¿·Ö£¬¾¹ý·ÖÎöÓÅ»¯ºó£¬Æô¶¯¹ý³Ì²¢·¢µÄhttpÇëÇóÊýÁ¿´Ó66ÌõѹËõµ½ÁË23Ìõ£¬Èç´ËÒ»À´ÎªÆô¶¯³É¹¦ºóÐÂÎÅ×ÊѶ¼°ÆäͼƬµÄ¼ÓÔØÁô³öÁ˸ü¶àµÄ´ø¿í£¬´Ó¶ø±£Ö¤ÁËÔÚµÚһʱ¼äÍê³ÉÐÂÎÅ×ÊѶµÄ¼ÓÔØ¡£Êµ¼Ê²âÊÔ±íÃ÷£¬¹â×öKPIµÄÊÂÇéÊDz»¹»µÄ£¬ÈË»¹ÊÇÐèÒªÓеãÀíÏ룬¾¹ýÓÅ»¯£¬ÔÚÊÓ¾õÌåÑéÉϽø²½·Ç³£Ã÷ÏÔ¡£
ÁíÍ⣬¹ý³ÌÖÐÇë½Ì¹ýSNGµÄ´óÅ£ÃÇ£¬Ìý˵ËûÃÇÒòΪÐèÒªÔÚapplicationWillFinishLaunchingÀï´¦ÀíµÄÒµÎñ¸ü¶à£¬ËùÒÔ»¹×öÁ˹ÜÀíÆ÷¹ÜÀíÕâЩÈÎÎñ£¬²»¹ýÒòΪWiFi¹Ü¼ÒÊǸöСÏîÄ¿£¬Óеãɱ¼¦ÓÃÅ£µ¶µÄ¸Ð¾õ£¬Òò´ËûÓÐÉîÈëÑо¿¡£
6. ÓÅ»¯rootViewController¼ÓÔØ
¿¼Âǵ½ÎÒ×÷Ϊһֻ¸ß¼¶³ÌÐòºï£¬¹¤×ʺܸߣ¬ÎªÁ˸ø¹«Ë¾½ÚÔ¼³É±¾£¬ÔÚÓÅ»¯Ö®Ç°£¬µ±È»ÐèÒªÏȲâÊÔÒ»ÏÂÄÄЩViewControllerµÄ¼ÓÔØºÄʱ±È½Ï´ó£¬È»ºóÔÙÉîÈëµ½¾ßÌåÒµÎñÖп´ÄÄЩ²¿·Ö´æÔڽϴóµÄÓÅ»¯¿Õ¼ä¡£Í¬Ê±£¬ÏÈ×öÓÅ»¯Ð§¹ûÃ÷ÏԵIJ¿·ÖÒ²ÓÐÀûÓÚÔöÇ¿×Ô¼ºµÄÐÅÐÄ¡£
ÔÚ¿ªÊ¼½²ÊöÎÊÌâ֮ǰ£¬ÎÒÃÇÏÈÀ´¿´Ò»ÏÂWiFi¹Ü¼ÒµÄUI²ã´Î½á¹¹£º

Ò»¸ö¿´ËƼòµ¥µÄ½çÃæÓÉÓÚ³ÐÔØÁ˺ܶàÒµÎñÐèÇ󣬴úÂëÁ¿ÆäʵÒѾ·Ç³£¾ªÈË¡£ÕâÀïÎÒ²»¾ßÌå½²ÊöÕâЩ¾ªÈ˵ÄÒµÎñÁ¿ÁË£¬³éÏó¶øÑÔ¿ÉWiFi¹Ü¼ÒµÄUI¼Ü¹¹×ÜÌå¶øÑÔ»ùÓÚTabBarControllerµÄ¿ò¼Ü£¬Èý¸ötab·Ö±ðÊÇ¡°Á¬½Ó¡±¡¢¡°·¢ÏÖ¡±¼°¡°Îҵġ±¡£AppÆô¶¯µÄʱºò£¬¸ù¾Ý¼ÓÔØÔÀí£¬»á¼ÓÔØTabBarController¡¢µÚÒ»¸öTab£¨¡°Á¬½Ó¡±£©µÄViewController¼°ÆäËùÓÐchildViewController¡£
UI¹¹¼ÜÇë¿´ÈçÏÂʾÒâͼ£¬ÆäÖÐÀ¶É«µÄ²¿·ÖÐèÒªÔÚAppÆô¶¯µÄʱºòÁ¢¼´¼ÓÔØ£º

¶ÔËùÓÐÆô¶¯Ïà¹ØµÄÄ£¿é´òêµã¼ÆËãºÄʱºó£¬·¢ÏÖtabBarControllerºÍconnectingViewController·Ö±ðÕ¼ÓÃÁËapplicationWillFinishLaunchingºÄʱµÄ31%ºÍ24%¡£¼ÓÔØºÄ·ÑÁË´óÁ¿Ê±¼ä£¬Õâ¸úËüËùÐèÒª³ÐÔØµÄÂß¼ÈÎÎñËÆºõ²¢²»¶Ô³Æ¡£ÓÚÊǼì²éÏà¹Ø´úÂë½øÐÐÉîÈë·ÖÎö£¬·¢ÏÖÁ˼¸¸öÎÊÌâ±È½ÏÑÏÖØ£º
ÓÐЩ³ÌÐòÔ±¿ÉÄܼܹ¹Òâʶ²»ÊÇ̫ǿ£¬Ö±½ÓÔÚtabBarControllerµÄÆô¶¯¹ý³ÌÖвåÈëÁ˸÷ÖÖÆæ¹ÖµÄÒµÎñ£¬ÀýÈç¼ì²éWiFiÁ¬½Ó״̬±ä»¯¡¢ÅäÖÃÀÈ¡£¬¶øÕâЩҵÎñÏÔȻӦ¸ÃÔÚÁíÍâµÄijЩµØ·½Í³Ò»´¦Àí£¬¶ø²»Ó¦¸ÃÔÚÒ»¸öViewControllerÉÏ¡£
ÓÉÓÚһЩÀúÊ·ÔÒò£¬Á¬½ÓÒ³µÄÊÓͼ¿ØÖÆÆ÷connectingViewController°üº¬ÁËÈý¸öchildViewController£ºWiFiViewController¡¢3GViewController¡¢errorViewController£¬·Ö±ðÔÚWiFi״̬¡¢3G״̬ºÍ³ö´í״̬ÏÂչʾ½çÃæ£¨Èýѡһ£¬ÆäÖÐÒ»¸öչʾµÄʱºòÆäËüÁ½¸öÊÓͼ»áÒþ²Ø£©¡£
´ó²¿·Öview¶¼ÊÇÖ±½Ó¼ÓÔØÍêµÄ¡£ÓÐЩ½çÃæµÄ¼ÓÔØ·Ç³£¸´ÔÓ£¬±ÈÈçÔÙ½øÈëAppʱ»áչʾһ¸ö¼ì²éWiFi¿ÉÓÃÐԺͰ²È«ÐԵ͝»£¬ÓÉÓÚÐèÒªµþ¼Ó½Ï¶àͼƬ£¬Õⲿ·ÖÊÓͼµÄ¼ÓÔØºÄʱ½Ï¶à¡£
ÓÉÓÚËæ×ż¸´Î¸Ä°æÖ®ºó£¬Á¬½ÓÒ³µÄUI¼Ü¹¹ÒѾ±äµÃºÜ²»ºÏÀí£¬ÀúÊ·°ü¸¤»¹ÊDZȽÏÖØµÄ£¬¶øÇÒñîºÏ±È½ÏÑÏÖØ£¬¼¸ºõÎÞ·¨¸Ä¶¯£¬Òò´Ë¾ö¶¨Öع¹¡£ÖÁÓÚtabBarController£¬¼ì²é´úÂëºó¾ö¶¨¼òµ¥µÄ°Ñ²»Ïà¹ØµÄÒµÎñ×öÒ»Ð©Ç¨ÒÆ£¬ÓÅ»¯childViewControllerµÄ¼ÓÔØ¹ý³Ì£¬²»×÷ÖØ¹¹¡£
¸Ä½øºóµÄ½á¹¹´óÖÂÈçÏÂͼ£¬ÆäÖÐÀ¶É«²¿·ÖÐèÒªÔÚAppÆô¶¯µÄʱºòÁ¢¼´¼ÓÔØ£º

ÓÉÓÚ±¾ÆªÖ÷Òª½²Æô¶¯ÐÔÄÜÓÅ»¯£¬Öع¹Éæ¼°µÄÈí¼þ¹¤³ÌºÍÉè¼ÆÄ£Ê½·½ÃæµÄ¶«Î÷¾Í²»ÏêϸÂÛÊöÁË£¬¶ÔÆô¶¯ÓÅ»¯µÄ¹ý³Ì£¬Ö÷ÒªÊÇʹÓÃÁ˸üºÏÀíµÄ·Ö²ã½á¹¹£¬Ê¹µÃÆô¶¯µÃÒÔÔÚ¸ü¶ÌµÄʱ¼äÄÚÍê³É¡£
ÖÁ´Ë£¬WiFi¹Ü¼ÒµÄÆô¶¯ÐÔÄÜ»ù±¾ÓÅ»¯Íê±Ï¡£
7. ÍÚ¾ò×îºóÒ»µãÐÔÄÜÓÅ»¯
ÓÉÓÚWiFi¹Ü¼ÒÊÇÒ»¸ö¾ßÓÐWiFiÁ¬½ÓÄÜÁ¦µÄApp£¬Òò´ËÓпÉÄÜÔÚºǫ́¹ý³ÌÖÐÍê³ÉÀäÆô¶¯¹ý³Ì£¨Êµ¼ÊÉÏÊÇÔÚÓû§½øÈëϵͳµÄWiFiÉèÖÃʱ£¬iOS»áÆô¶¯WiFi¹Ü¼Ò£¬ÒÔ±ãÇëÇóWiFiÃÜÂ룩¡£ÔÚÕâÖÖÇé¿öÏ£¬Õû¸örootViewController¶¼ÊDz»ÐèÒª¼ÓÔØµÄ¡£
¡¾µÚËIJ¿·Ö¡¿×ܽá
- ÀûÓÃDYLD_PRINT_STATISTICS·ÖÎömain()º¯Êý֮ǰµÄºÄʱ
- ÖØÐÂÊáÀí¼Ü¹¹£¬¼õÉÙ¶¯Ì¬¿â¡¢ObjCÀàµÄÊýÄ¿£¬¼õÉÙCategoryµÄÊýÄ¿
- ¶¨ÆÚɨÃè²»ÔÙʹÓõĶ¯Ì¬¿â¡¢Àà¡¢º¯Êý£¬ÀýÈçÿÁ½¸öµü´úÒ»´Î
- ÓÃdispatch_once()´úÌæËùÓÐµÄ attribute((constructor)) º¯Êý¡¢C++¾²Ì¬¶ÔÏó³õʼ»¯¡¢ObjCµÄ+load
- ÔÚÉè¼ÆÊ¦¿É½ÓÊܵķ¶Î§ÄÚѹËõͼƬµÄ´óС£¬»áÓÐÒâÍâÊÕ»ñ
- ÀûÓÃêµã·ÖÎöapplicationWillFinishLaunchingµÄºÄʱ
- ½«²»ÐèÒªÂíÉÏÔÚapplicationWillFinishLaunchingÖ´ÐеĴúÂëÑÓºóÖ´ÐÐ
- rootViewControllerµÄ¼ÓÔØ£¬Êʵ±½«Ä³Ò»¼¶µÄchildViewController»òsubviewsÑÓºó¼ÓÔØ
- Èç¹ûÄãµÄApp¿ÉÄܻᱻºǫ́ÀÆð²¢ÀäÆô¶¯£¬¿É¿¼ÂDz»¼ÓÔØrootViewController
- ²»Ó¦·Å¹ýµÄһЩСϸ½Ú
- Òì²½²Ù×÷²¢²»Ó°ÏìÖ¸±ê£¬µ«ÓпÉÄÜÓ°Ïì½»»¥ÌåÑ飬ÀýÈç´óÁ¿ÍøÂçÇëÇóµ¼ÖÂÊý¾ÝÓµ¶Â
- ÓÐʱºòһЩ½»»¥ÉϵÄÓÅ»¯±È¼¼ÊõÊÖ¶ÎЧ¹û¸üÃ÷ÏÔ£¬ÊÓ¾õÉϵĿì¾ö²»ÊDZùÀäµÄÊý¾Ý¿ÉÒÔ½âÊ͵ģ¬ºÃºÃºÍÄãÃǵÄÉè¼ÆÊ¦Ì¸Ì¸¶¯»
|