iOSÓ¦ÓóÌÐòÒ»°ã¶¼ÊÇÓÉ×Ô¼º±àдµÄ´úÂëºÍϵͳ¿ò¼Ü£¨system frameworks£©×é³É£¬ÏµÍ³¿ò¼ÜÌṩһЩ»ù±¾infrastructure¸øËùÓÐAppÀ´ÔËÐУ¬¶øÄãÌṩ×Ô¼º±àдµÄ´úÂëÀ´¶¨ÖÆAppµÄÍâ¹ÛºÍÐÐΪ¡£ Òò´Ë£¬Á˽âiOS InfrastructureºÍËüÃÇÈçºÎ¹¤×÷¶Ô±àдAppÊǺÜÓаïÖúµÄ¡£
Mainº¯ÊýÈë¿Ú
ËùÓлùÓÚC±àдµÄAppµÄÈë¿Ú¶¼ÊÇmainº¯Êý£¬µ«iOSÓ¦ÓóÌÐòÓе㲻ͬ¡£²»Í¬¾ÍÊÇÄã²»ÐèҪΪiOSÓ¦ÓóÌÐò¶ø×Ô¼º±àдmainº¯Êý£¬µ±ÄãʹÓÃXcode´´½¨¹¤³ÌµÄʱºò¾ÍÒѾÌṩÁË¡£³ý·ÇÒ»Ð©ÌØÊâÇé¿ö£¬·ñÔòÄã²»Ó¦¸ÃÐÞ¸ÄXcodeÌṩµÄmainº¯ÊýʵÏÖ¡£Ê¾Àý´úÂëÈçÏ£º
#import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } |
ÉÏÃæÊµÀý´úÂëÖÐÓÐÒ»¸öºÜÖØÒªµÄº¯Êý UIApplicationMain£¬ËüÖ÷ÒªÊÇ´´½¨AppµÄ¼¸¸öºËÐĶÔÏóÀ´´¦ÀíÒÔϹý³Ì£º
- ´Ó¿ÉÓÃStoryboardÎļþ¼ÓÔØÓû§½çÃæ£»
- µ÷ÓÃAppDelegate×Ô¶¨Òå´úÂëÀ´×öһЩ³õʼ»¯ÉèÖã»
- ½«App·ÅÈëMain Run Loop»·¾³ÖÐÀ´ÏìÓ¦ºÍ´¦ÀíÓëÓû§½»»¥²úÉúµÄʼþ¡£
Ó¦ÓóÌÐòµÄ¼Ü¹¹
iOSÓ¦ÓóÌÐò¶¼×ñÑModel-View-ControllerµÄ¼Ü¹¹£¬Model¸ºÔð´æ´¢Êý¾ÝºÍ´¦ÀíÒµÎñÂß¼£¬View¸ºÔðÏÔʾÊý¾ÝºÍÓëÓû§½»»¥£¬ControllerÊÇÁ½ÕßµÄÖн飬е÷ModelºÍViewÏ໥Ð×÷¡£ËüÃǵÄͨѶ¹æÔòÈçÏ£º
1. ControllerÄܹ»·ÃÎÊModelºÍView£¬ModelºÍView²»ÄÜ»¥Ïà·ÃÎÊ¡£

2. µ±ViewÓëÓû§½»»¥²úÉúʼþʱ£¬Ê¹ÓÃtarget-action·½Ê½À´´¦Àí¡£

3. µ±ViewÐèÒª´¦ÀíÒ»Ð©ÌØÊâUIÂß¼»ò»ñÈ¡Êý¾ÝԴʱ£¬Í¨¹ýdelegate»òdata source·½Ê½½»¸øControllerÀ´´¦Àí¡£

4. Model²»ÄÜÖ±½ÓÓëControllerͨÐÅ£¬µ±ModelÓÐÊý¾Ý¸üÐÂʱ£¬¿ÉÒÔͨ¹ýNotification»òKVO (Key Value Observing)À´Í¨ÖªController¸üÐÂView¡£

Á˽âiOSµÄMVCÉè¼ÆÄ£Ê½Ö®ºó£¬ÎÒÃÇ´ÓÏÂͼÀ´Á˽âÔÚMVCģʽÏÂiOSÓ¦ÓóÌÐòÓÐÄÄЩ¹Ø¼ü¶ÔÏóÒÔ¼°ËüÃÇÖ°ÔðÖ÷ÒªÊÇʲô£¿

Óû§ÓëiOSÉ豸½»»¥Ê±²úÉúµÄʼþ£¨Multitouch Events£¬Motion Event£¬Remote Control Event£©½»ÓÉUIApplication¶ÔÏóÀ´·Ö·¢¸øcontrol objects£¨UIControl ¶ÔÓ¦µÄtarget objectsÀ´´¦Àí²¢ÇÒ¹ÜÀíÕû¸öʼþÑ»·£¬¶øÒ»Ð©¹ØÓÚAppÔËÐÐÊ±ÖØÒªÊ¼þίÍиøapp delegateÀ´´¦Àí¡£
App delegate¶ÔÏó×ñÑUIApplicationDelegateÐÒ飬ÏìÓ¦appÔËÐÐÊ±ÖØÒªÊ¼þ(appÆô¶¯¡¢appÄÚ´æ²»×ã¡¢appÖÕÖ¹¡¢Çл»µ½ ÁíÒ»¸öapp¡¢ÇлØapp)£¬Ö÷ÒªÓÃÓÚappÔÚÆô¶¯Ê±³õʼ»¯Ò»Ð©ÖØÒªÊý¾Ý½á¹¹£»ÀýÈ磬³õʼ»¯UIWindow£¬ÉèÖÃһЩÊôÐÔ£¬ÎªwindowÌí¼Ó rootViewController¡£
View ControllerÓÐÒ»¸öviewÊôÐÔÊÇview²ã´Î½á¹¹Öеĸùview£¬Äã¿ÉÒÔÌí¼Ó×ÓviewÀ´¹¹½¨¸´ÔÓµÄview£»controllerÓÐһЩ viewDidLoad¡¢viewWillAppearµÈ·½·¨À´¹ÜÀíviewµÄÉúÃüÖÜÆÚ£»ÓÉÓÚËü¼Ì³ÐUIResponder£¬ËùÓл¹»áÏìÓ¦ºÍ´¦ÀíÓû§Ê ¼þ¡£
- Documents ºÍ data model ¶ÔÏó
data model¶ÔÏóÖ÷ÒªÓÃÀ´´æ´¢Êý¾Ý¡£ÀýÈ磬¶öÁËôappÔÚËÑË÷Çл»µØÖ·ºó£¬ÓÐÀúÊ·¼Ç¼ËÑË÷µØÖ·ÀúÊ·£¬µ±appÏÂ´ÎÆô¶¯Ê±£¬¶ÁÈ¡ºÍÏÔʾËÑË÷µØÖ·ÀúÊ·¡£
document¶ÔÏó(¼Ì³ÐUIDocument)ÓÃÀ´¹ÜÀíһЩ»òËùÓеÄdata model¶ÔÏó¡£document¶ÔÏó²¢²»ÊDZØÐëµÄ£¬µ«ÌṩһÖÖ·½±ãµÄ·½Ê½À´·Ö×éÊôÓÚµ¥¸öÎļþ»ò¶à¸öÎļþµÄÊý¾Ý¡£
UIWindow¶ÔÏóλÓÚview²ã´Î½á¹¹ÖеÄ×î¶¥²ã£¬Ëü³äµ±Ò»¸ö»ù±¾ÈÝÆ÷¶ø²»ÏÔʾÄÚÈÝ£¬Èç¹ûÏëÏÔʾÄÚÈÝ£¬Ìí¼ÓÒ»¸öcontent viewµ½window¡£
ËüÒ²ÊǼ̳ÐUIResponder£¬ËùÒÔËüÒ²ÊÇ»áÏìÓ¦ºÍ´¦ÀíÓû§Ê¼þ¡£
- View¡¢control¡¢layer ¶ÔÏó
View ¶ÔÏó¿ÉÒÔͨ¹ýaddSubviewºÍremoveFromSuperview µÈ·½·¨¹ÜÀíviewµÄ²ã´Î½á¹¹£¬Ê¹ÓÃlayoutSubviews¡¢layoutIfNeededºÍsetNeedsLayoutµÈ·½·¨²¼¾ÖviewµÄ²ã ´Î½á¹¹£¬µ±Äã·¢ÏÖϵͳÌṩviewÒѾÂú×ã²»ÁËÄãÏëÒªµÄÍâ¹ÛÐèÇóʱ£¬¿ÉÒÔÖØÐ´drawRect·½·¨»òͨ¹ýlayerÊôÐÔÀ´¹¹Ô츴ÔÓµÄͼÐÎÍâ¹ÛºÍ¶¯»¡£»¹ÓÐ Ò»µã£¬UIViewÒ²ÊǼ̳ÐUIResponder£¬ËùÒÔÒ²Äܹ»´¦ÀíÓû§Ê¼þ¡£
Control¶ÔÏóͨ³£¾ÍÊÇ´¦ÀíÌØ¶¨ÀàÐÍÓû§½»»¥µÄView£¬³£ÓõÄÓÐbutton¡¢switch¡¢text fieldµÈ¡£
³ýÁËʹÓÃViewºÍControlÀ´¹¹½¨view²ã´Î½á¹¹À´Ó°ÏìappÍâ¹ÛÖ®Í⣬»¹¿ÉÒÔʹÓÃCore Animation¿ò¼ÜµÄLayer¶ÔÏóÀ´äÖȾviewÍâ¹ÛºÍ¹¹½¨¸´Ôӵ͝»¡£
Main Run Loop
Ò» ¸öiOSÓ¦ÓóÌÐòµÄmain run loopÖ÷Òª×÷ÓÃÊÇ´¦ÀíËùÓÐÓëÓû§Ïà¹ØµÄʼþ¡£UIApplication¶ÔÏóÔÚÆô¶¯Ê±¾ÍÉèÖÃmain run loopºÍʹÓÃËüÀ´´¦ÀíʼþºÍ¸üлùÓÚviewµÄ½çÃæ¡£ÕýÈçËüµÄÃû×ÖÏÔʾ£¬main run loopÊÇÔËÐÐÔÚÓ¦ÓóÌÐòµÄÖ÷Ï̡߳£ÕâÑù¾ÍÈ·±£Óë½ÓÊÕµ½Óû§Ïà¹ØµÄʼþ±»ÓÐÐòµØ´¦Àí¡£
ÏÂͼÏÔʾmain run loopµÄ¼Ü¹¹ºÍÓû§Ê¼þ×îÖÕÊÇÔõÑù±»Ó¦ÓóÌÐò´¦Àí¡£µ±Óû§ÓëÉ豸½»»¥Ê±£¬ÏµÍ³¾Í»áÉú³ÉÓë½»»¥¹ØÁªµÄʼþ£¬È»ºó±»Ó¦ÓóÌÐòµÄUIKitͨ¹ýÒ»¸öÌØÊâµÄ¶Ë¿Ú À´·Ö·¢¡£Ó¦ÓóÌÐò°Ñʼþ·ÅÈë¶ÓÁУ¬È»ºóÖð¸ö·Ö·¢µ½main run loopÀ´Ö´ÐС£UIApplication¶ÔÏóÊǵÚÒ»¸ö¶ÔÏó½ÓÊÕµ½Ê¼þ£¬È»ºó¾ö¶¨ÔõÑù´¦ÀíËü¡£Ò»¸ötouch eventͨ³£¶¼±»·Ö·¢µ½main window¶ÔÏó£¬È»ºóÒÀ´Î·Ö·¢µ½·¢Éú´¥ÅöµÄview¡£ÆäËûeventµÄ½ÓÊÕʼþ¶ÔÏó·¾¶¿ÉÄÜÓе㲻ͬ¡£

´ó ¶àÊýµÄʼþͨ¹ýʹÓÃmain run loopÀ´·Ö·¢£¬µ«ÓÐЩ²»ÊÇ¡£ÓÐЩʼþ±»·¢Ë͵½Ò»¸ödelegate¶ÔÏó»ò´«µÝµ½ÄãÌṩµÄblockÖС£ÏëÁ˽â¸ü¶àÈçºÎ´¦Àí´ó¶àÊýÀàÐ͵Äʼþ£¬ÆäÖаüÀ¨ touch¡¢remote control¡¢motion¡¢accelerometerºÍgyroscopicµÈʼþ£¬Çë²éÔÄ Event Handle Guide for iOS¡£
Ó¦ÓóÌÐòµÄ״̬ºÍ¶àÈÎÎñ
ÓÐʱϵͳ»á´ÓAppÒ»ÖÖ״̬Çл»ÁíÒ»ÖÖ״̬À´ÏìӦϵͳ·¢ÉúµÄʼþ¡£ÀýÈ磬µ±Óû§°´ÏÂHome¼ü¡¢µç»°´òÈë»òÆäËûÖжϷ¢Éúʱ£¬µ±Ç°ÔËÐеÄÓ¦ÓóÌÐò»áÇл»×´Ì¬À´ÏìÓ¦¡£Ó¦ÓóÌÐòµÄ״̬ÓÐÒÔϼ¸ÖÖ£º

- Not running£ºApp»¹Ã»ÔËÐÐ
- Inactive£ºAppÔËÐÐÔÚforegroundµ«Ã»ÓнÓÊÕʼþ
- Active£ºAppÔËÐÐÔÚforegroundºÍÕýÔÚ½ÓÊÕʼþ
- Background£ºÔËÐÐÔÚbackgroundºÍÕýÔÚÖ´ÐдúÂë
- Suspended£ºÔËÐÐÔÚbackgroundµ«Ã»ÓÐÖ´ÐдúÂë
´ó¶àÊý·¢Éú״̬ת»»Ê±¶¼»áµ÷ÓÃdelegate¶ÔÏó¶ÔÓ¦µÄ·½·¨À´ÏìÓ¦AppµÄ״̬¸Ä±ä¡£ÏÂÃæ»ã×ÜÁËdelegate¶ÔÏóµÄËùÓз½·¨£¬µ±App״̬·¢Éúת»»Ê±£¬Äã¿ÉÄÜ»áʹÓõ½ËüÃÇ¡£
- application:willFinishLaunchingWithOptions: - Õâ¸ö·½·¨ÊÇÄãÔÚÆô¶¯Ê±µÄµÚÒ»´Î»ú»áÀ´Ö´ÐдúÂë
- application:didFinishLaunchingWithOptions: - Õâ¸ö·½·¨ÔÊÐíÄãÔÚÏÔʾapp¸øÓû§Ö®Ç°Ö´ÐÐ×îºóµÄ³õʼ»¯²Ù×÷
- applicationDidBecomeActive: - appÒѾÇл»µ½active״̬ºóÐèÒªÖ´ÐеIJÙ×÷
- applicationWillResignActive: - app½«Òª´Óǰ̨Çл»µ½ºǫ́ʱÐèÒªÖ´ÐеIJÙ×÷
- applicationDidEnterBackground: - appÒѾ½øÈëºǫ́ºóÐèÒªÖ´ÐеIJÙ×÷
- applicationWillEnterForeground: - app½«Òª´Óºǫ́Çл»µ½Ç°Ì¨ÐèÒªÖ´ÐеIJÙ×÷£¬µ«app»¹²»ÊÇactive״̬
- applicationWillTerminate: - app½«Òª½áÊøÊ±ÐèÒªÖ´ÐеIJÙ×÷
ÏÖÔÚ½²ÏÂAppÆô¶¯¡¢À´»ØÇл»AppºÍËøÆÁʱ״̬µÄÇл»ºÍµ÷ÓöÔÓ¦ÄÄЩdelegate¶ÔÏóµÄ·½·¨£º

Èç ͼËùʾ£¬µ±AppÆô¶¯Ê±£¬Ê×ÏÈÓÉnot running״̬Çл»µ½inactive״̬£¬´Ëʱµ÷ÓÃapplication:didFinishLaunchingWithOptions:·½·¨£» È»ºóÓÉinactive״̬Çл»µ½active״̬£¬´Ëʱµ÷ÓÃapplicationDidBecomeActive:·½·¨¡£

µ±App·¢ÉúÖжÏʱ£¬ÓÉactive״̬Çл»µ½inactive״̬£¬´Ëʱµ÷ÓÃapplicationWillResignActive:·½·¨¡£

Èç ͼËùʾ£¬µ±Çл»µ½ÁíÒ»¸öAppʱ£¬ÓÉ״̬activeÇл»µ½inactive£¬´Ëʱµ÷ÓÃapplicationWillResignActive:·½·¨£» È»ºó´Óinactive״̬Çл»µ½running״̬£¬´Ëʱµ÷ÓÃapplicationDidEnterBackground:·½·¨¡£

¶ø µ±Çл»»Ø±¾À´µÄAppʱ£¬ÓÉrunning״̬Çл»µ½inactive״̬£¬´Ëʱµ÷ÓÃapplicationWillEnterForeground:·½ ·¨£¬È»ºóÓÉinactive״̬Çл»µ½active״̬£¬µ÷ÓÃapplicationDidBecomeActive:·½·¨¡£

ÈçͼËùʾ£¬µ±ÊÖ»úËøÆÁʱ£¬ÓÉ״̬activeÇл»µ½inactive£¬´Ëʱµ÷ÓÃapplicationWillResignActive:£»È»ºóÔÙÓÉ inactive״̬Çл»µ½running״̬£¬´Ëʱµ÷ÓÃapplicationDidEnterBackground:·½·¨¡£
¸ü¶à¹ØÓÚapp״̬Çл»ÒÔ¼°µ÷ÓÃapp delegateÄÄЩ·½·¨£¬Çë¹Û¿´WWDC 2011 SessionµÄ session_320__adopting_multitasking_in_your_app ÊÓÆµ¡£
Ó¦ÓóÌÐòµÄÖÕÖ¹
ϵͳ³£³£ÊÇΪÆäËûappÆô¶¯Ê±ÓÉÓÚÄÚ´æ²»×ã¶ø»ØÊÕÄÚ´æ×îºóÐèÒªÖÕÖ¹Ó¦ÓóÌÐò£¬µ«ÓÐʱҲ»áÊÇÓÉÓÚappºÜ³¤Ê±¼ä²ÅÏìÓ¦¶øÖÕÖ¹¡£Èç¹ûappµ±Ê±ÔËÐÐÔÚºǫ́²¢ÇÒû ÓÐÔÝÍ££¬ÏµÍ³»áÔÚÓ¦ÓóÌÐòÖÕֹ֮ǰµ÷ÓÃapplicationWillTerminate:À´±£´æÓû§µÄÒ»Ð©ÖØÒªÊý¾ÝÒÔ±ãÏÂ´ÎÆô¶¯Ê±»Ö¸´µ½appÔÀ´µÄ״̬¡£
×ܽá
±¾ÎÄ×ܽáÁËiOSÓ¦ÓóÌÐò´ÓÆô¶¯ µ½½áÊø¹ý³ÌÖÐÓÐÄÄЩ¹Ø¼ü¶ÔÏóÔÚ²ÎÓ룬ÒÔ¼°µ±Óû§Óëϵͳ½»»¥Ê±²úÉúʼþʱ£¬ÏµÍ³ÀûÓÃmain run loopÀ´¹ÜÀíʼþÑ»·£¬¾ö¶¨½«Ê¼þ½»¸øÏµÍ³ÄÄЩ¶ÔÏó´¦ÀíºÍÈçºÎ´¦Àí¡£¶øµ±AppÆô¶¯¡¢À´»ØÇл»AppºÍËøÆÁʱ£¬AppµÄ״̬ÈçºÎÇл»ºÍµ÷ÓöÔÓ¦µÄÄÄЩ app delegate¶ÔÏóÀ´´¦Àí¡£ |