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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS App Æô¶¯ÐÔÄÜÓÅ»¯
 
×÷ÕߣºCSDN ·¢²¼ÓÚ£º 2017-8-31
  2005  次浏览      28
 

µ¼Óï

±¾ÎĽéÉÜÁËÈçºÎÓÅ»¯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%)

ÈçºÎ½â¶Á

  1. main()º¯Êý֮ǰ×ܹ²Ê¹ÓÃÁË94.33ms
  2. ÔÚ94.33msÖУ¬¼ÓÔØ¶¯Ì¬¿âÓÃÁË61.87ms£¬Ö¸ÕëÖØ¶¨Î»Ê¹ÓÃÁË3.09ms£¬ObjCÀà³õʼ»¯Ê¹ÓÃÁË10.78ms£¬¸÷ÖÖ³õʼ»¯Ê¹ÓÃÁË18.50ms¡£
  3. ÔÚ³õʼ»¯ºÄ·ÑµÄ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µÄÁ÷³©¶ÈÐÔÄÜ£¿ÎÒÈÏΪӦ¸ÃÊ×ÏÈ°ÑÆô¶¯¹ý³Ì·ÖΪËĸö²¿·Ö£º

  1. main()º¯Êý֮ǰ
  2. main()º¯ÊýÖ®ºóÖÁapplicationWillFinishLaunchingÍê³É
  3. AppÍê³ÉËùÓб¾µØÊý¾ÝµÄ¼ÓÔØ²¢½«ÏàÓ¦µÄÐÅϢչʾ¸øÓû§
  4. 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ùÀäµÄÊý¾Ý¿ÉÒÔ½âÊ͵ģ¬ºÃºÃºÍÄãÃǵÄÉè¼ÆÊ¦Ì¸Ì¸¶¯»­
   
2005 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì