Cocoa¿ò¼ÜÊÇiOSÓ¦ÓóÌÐòµÄ»ù´¡£¬Á˽âCocoa¿ò¼Ü£¬¶Ô¿ª·¢iOSÓ¦ÓÃÓкܴóµÄ°ïÖú¡£
1¡¢CocoaÊÇʲô£¿
CocoaÊÇOS XºÍ iOS²Ù×÷ϵͳµÄ³ÌÐòµÄÔËÐл·¾³¡£
ÊÇʲôÒòËØÊ¹Ò»¸ö³ÌÐò³ÉΪCocoa³ÌÐòÄØ£¿²»ÊDZà³ÌÓïÑÔ£¬ÒòΪÔÚCocoa¿ª·¢ÖÐÄã¿ÉÒÔʹÓø÷ÖÖÓïÑÔ£»Ò²²»ÊÇ¿ª·¢¹¤¾ß£¬Äã¿ÉÒÔÔÚÃüÁîÐÐÉϾͿÉÒÔ´´½¨Cocoa³ÌÐò¡£Cocoa³ÌÐò¿ÉÒÔÕâô˵£¬ËüÊÇÓÉһЩ¶ÔÏó×é³É£¬¶øÕâЩ¶ÔÏóµÄÀà×îºó¶¼ÊǼ̳ÐÓÚËüÃǵĸùÀà
£ºNSObject¡£¶øÇÒËüÃǶ¼ÊÇ»ùÓÚObjective-CÔËÐл·¾³µÄ¡£
1.1¡¢Cocoa¿ò¼Ü
iOSÖУ¬CocoaÖÚ¶à¿ò¼ÜÖÐ×îÖØÒª×î»ù±¾µÄÁ½¸ö¿ò¼ÜÊÇ£ºFoundation
ºÍ UIKit¡£
Foundation ºÍ½çÃæÎ޹أ¬Ò²¿ÉÒÔ˵ºÍ½çÃæÎ޹صÄÀà»ù±¾ÊÇFoundation¿ò¼ÜµÄ£¬ºÍ½çÃæÏà¹ØµÄÊÇUIKit¿ò¼Ü¡£
ÕâÁ½¸ö¿ò¼ÜÔÚϵͳÖд¦ÓÚµÄλÖÃÈçͼ£º

1.2¡¢Foundation¿ò¼Ü
ºÃ°É£¬ÄÇÎÒÃÇ¿´¿´Á½¸ö¿ò¼ÜµÄÀà×éÖ¯¼Ü¹¹Í¼£¬µÚÒ»¸öÏÈ¿´FoundationµÄ£¬Èý¸öͼ£¬°üÀ¨ÁËFoundationËùÒÔµÄÀ࣬ͼÖлÒÉ«µÄÊÇiOS²»Ö§³ÖµÄ£¬»ÒÉ«²¿·ÖÊÇOS
XϵͳµÄ¡£



½«ÉÏͼFoundation¿ò¼ÜÖеÄÀà½øÐÐÂß¼·ÖÀàÈçÏ£º
1.Öµ¶ÔÏó
2.¼¯ºÏ
3.²Ù×÷ϵͳ·þÎñ °üÀ¨ÏÂÃæÈý¸ö£ºÎļþϵͳºÍURL ½ø³Ì¼äͨѶ¡£ Õâ¸ö·¶³ëÖеĴ󲿷ÖÀà´ú±í²»Í¬µÄϵͳ¶Ë¿Ú¡¢Ì×½Ó×Ö¡¢ºÍÃû×Ö·þÎñÆ÷£¬¶ÔʵÏֵײãµÄIPCºÜÓÐÓá£NSPipe´ú±íÒ»¸öBSD¹ÜµÀ£¬¼´Ò»ÖÖ½ø³Ì¼äµÄµ¥ÏòͨѶͨµÀ¡£
Ï̺߳Í×ÓÈÎÎñ¡£ NSThreadÀàʹÄú¿ÉÒÔ´´½¨¶àÏ̵߳ijÌÐò£¬¶ø¸÷ÖÖËø£¨lock£©ÀàÔòΪ±Ë´Ë¾ºÕùµÄÏß³ÌÔÚ·ÃÎʽø³Ì×ÊԴʱÌṩ¸÷ÖÖ¿ØÖÆ»úÖÆ¡£Í¨¹ýNSTask£¬ÄúµÄ³ÌÐò¿ÉÒÔ·Ö³ö
Ò»¸ö×Ó½ø³ÌÀ´Ö´ÐÐÆäËü¹¤×÷»ò½øÐнø¶È¼à¿Ø¡£
4.֪ͨ
5.¹éµµºÍÐòÁл¯
6.±í´ïʽºÍÌõ¼þÅжÏ
7.Objective-CÓïÑÔ·þÎñ
1.3 UIKit¿ò¼Ü
Ó¦ÓóÌÐò¿ÉÒÔͨ¹ýÈýÖÖ·½Ê½Ê¹ÓÃUIKit´´½¨½çÃæ
1.ÔÚÓû§½çÃæ¹¤¾ß£¨interface Buidler£©´Ó¶ÔÏó¿âÀï ÍÏ×§´°¿Ú£¬ÊÓͼ»òÕ߯äËûµÄ¶ÔÏóʹÓá£
2.ÓôúÂë´´½¨
3.ͨ¹ý¼Ì³ÐUIViewÀà»ò¼ä½Ó¼Ì³ÐUIViewÀàʵÏÖ×Ô¶¨ÒåÓû§½çÃæ
¿ò¼ÜÀà×éÖ¯¼Ü¹¹Í¼£º

ÔÚͼÖпÉÒÔ¿´³ö£¬responder ÀàÊÇͼÖÐ×î´ó·ÖÖ§µÄ¸ùÀ࣬UIResponderΪ´¦ÀíÏìӦʼþºÍÏìÓ¦Á´
¶¨ÒåÁ˽çÃæºÍĬÈÏÐÐΪ¡£µ±Óû§ÓÃÊÖÖ¸¹ö¶¯Áбí»òÕßÔÚÐéÄâ¼üÅÌÉÏÊäÈëʱ£¬UIKit¾ÍÉú³Éʱ¼ä´«Ë͸øUIResponderÏìÓ¦Á´£¬Ö±µ½Á´ÖÐÓжÔÏó´¦ÀíÕâ¸öʼþ¡£ÏàÓ¦µÄºËÐĶÔÏ󣬱ÈÈ磺UIApplication
£¬UIWindow£¬UIView¶¼Ö±½Ó»ò¼ä½ÓµÄ´ÓUIResponder¼Ì³Ð¡£
2¡¢Cocoa¶ÔÏó
2.1 Objective-CÊÇÃæÏò¶ÔÏóµÄÓïÑÔ
Objective-CºÍJava C++Ò»Ñù£¬Óзâ×°£¬¼Ì³Ð£¬¶à̬£¬ÖØÓᣵ«ÊÇËü²»ÏñC++ÄÇÑùÓÐÖØÔØ²Ù×÷·¨¡¢Ä£°æºÍ¶à¼Ì³Ð£¬Ò²Ã»ÓÐJavaµÄÀ¬»ø»ØÊÕ»úÖÆ¡£
2.2 Objective-CµÄÓŵã
Objective-CÓïÑÔÓÐC++ JavaµÈÃæÏò¶ÔÏóµÄÌØµã£¬ÄÇÊÇÔ¶Ô¶²»ÄÜÌåÏÖËüµÄÓŵãµÄ¡£Objective-CµÄÓŵãÊÇËüÊǶ¯Ì¬µÄ¡£¶¯Ì¬ÄÜÁ¦ÓÐÈýÖÖ£º
1.¶¯Ì¬Àà-ÔËÐÐʱȷ¶¨ÀàµÄ¶ÔÏó
2.¶¯Ì¬°ó¶¨-ÔËÐÐʱȷ¶¨Òªµ÷Óõķ½·¨
3.¶¯Ì¬¼ÓÔØ--ÔËÐÐʱΪ³ÌÐò¼ÓÔØÐµÄÄ£¿é
2.3 ¶¯Ì¬ÄÜÁ¦Ïà¹ØµÄisaÖ¸Õë
ÿ¸öObjective-C¶ÔÏó¶¼ÓÐÒ»¸öÒþ²ØµÄÊý¾Ý½á¹¹£¬Õâ¸öÊý¾Ý½á¹¹ÊÇObjective-C¶ÔÏóµÄµÚÒ»¸ö³ÉÔ±±äÁ¿£¬Ëü¾ÍÊÇisaÖ¸Õë¡£Õâ¸öÖ¸ÕëÖ¸ÏòÄÄÄØ£¿ËüÖ¸ÏòÒ»¸öÀà¶ÔÏó(class
object ¼ÇסËüÊǸö¶ÔÏó£¬ÊÇÕ¼ÓÃÄÚ´æ¿Õ¼äµÄÒ»¸ö±äÁ¿£¬Õâ¸ö¶ÔÏóÔÚ±àÒëµÄʱºò±àÒëÆ÷¾ÍÉú³ÉÁË£¬×¨ÃÅÀ´ÃèÊöij¸öÀàµÄ¶¨Òå)£¬Õâ¸öÀà¶ÔÏó°üº¬ÁËObjective-C¶ÔÏóµÄһЩÐÅÏ¢£¨ÎªÁËÇø·ÖÁ½¸ö¶ÔÏó£¬ÎÒ°ÑÇ°ÃæÌáµ½µÄ¶ÔÏó½ÐObjective-C¶ÔÏ󣩣¬°üÀ¨Objective-C¶ÔÏóµÄ·½·¨µ÷¶È±í£¬ÊµÏÖÁËʲôÐÒéµÈµÈ¡£Õâ¸ö°üº¬ÐÅÏ¢¾ÍÊÇObjective-C¶¯Ì¬ÄÜÁ¦µÄ¸ùÔ´ÁË¡£
ÄÇÎÒÃÇ¿´¿´isaÖ¸ÕëÀàÐ͵ÄÊý¾Ý½á¹¹ÊÇʲôÑùµÄ£¿Èç¹ûÅ׿ªNSObject¶ÔÏóµÄÆäËûµÄ³ÉÔ±Êý¾ÝºÍ±äÁ¿£¬NSObject¿ÉÒÔ¿´³ÉÕâÑù£º
@interface NSObject <NSObject> { Class isa; } |
²»¿¼ÂÇ@interface¹Ø¼ü×ÖÔÚ±àÒëʱµÄ×÷Ó㬿ÉÒÔ°ÑNSObject¸ü½Ó½üCÓïÑԽṹ±íʾΪ£º
struct NSObject{ ¡¡¡¡Class isa; } |
ClassÊÇÓÃtypedef ¶¨ÒåµÄ
typedef struct objc_class *Class; |
ÄÇNSObject¿ÉÒÔÕâôдÁË
struct NSObject{ ¡¡¡¡objc_class *isa } |
ÄÇobjc_classµÄ½á¹¹ÊÇʲôÑùµÄÄØ£¿´ó¸ÅÊÇÕâÑùµÄ£º
struct objc_class { Class isa; Class super_class; const char *name; long version; long info; long instance_size; struct objc_ivar_list *ivars; struct objc_method_list **methodLists; struct objc_cache *cache; struct objc_protocol_list *protocols; } |
ÕâÀï»á¿´µ½£¬ÔÚÕâ¸ö½á¹¹ÌåÀﻹÓÐÒ»¸öisaÖ¸Õ룬ÓÖÊÇÒ»ÖØÖ¸Ïò£¬ÊDz»ÊÇÓÐÖÖµ½Á˵ÁÃοռäµÄ¸Ð¾õ¡£²»ÓýôÕÅ£¬take
easy£¬²»»áÓÐÄÇô¶à²ã´ÎµÄ£¬ÕâÀïµÄisaÖ¸ÕëÖ¸ÏòµÄÊÇÔªÀà¶ÔÏó(metaclass object)£¬´øÓÐÔª×Ö£¬Ö¤Ã÷¿ìµ½Í·ÁË¡£ÄÇÔª¶ÔÏóÓÐɶÓÃÄØ£¿ËüÓÃÀ´´æ´¢µÄ¹ØÓÚÀàµÄ°æ±¾£¬Ãû×Ö£¬Àà·½·¨µÈÐÅÏ¢¡£ËùÓеÄÔªÀà¶ÔÏó(metaclass
object)¶¼Ö¸Ïò NSObjectµÄÔªÀà¶ÔÏ󣬵½Í·»¹ÊÇNSObject¡£Ò»¹²Èý´Î£ºÀà¶ÔÏó->ÔªÀà¶ÔÏó->NSObjectÔªÀà¶ÔÏó¡£
ΪÁ˵õ½Õû¸öÀà×éÖ¯¼Ü¹¹µÄÐÅÏ¢£¬objc_class½á¹¹ÀﶨÒåÁ˵ڶþ¸ö³ÉÔ±±äÁ¿Class
super_class£¬ËüÖ¸Ïò¸¸ÀàµÄÀà¶ÔÏó¡£ËµÁËÕâô¶à£¬¿ÉÄܹØÏµÂƲ»Çå³þ£¬ÓеÀÊÇÒ»ÕÅͼʤ¹ýǧÑÔÍòÓï

ͼÖпÉÒÔ¿´³ö£¬D3¼Ì³ÐD2,D2¼Ì³ÐD1,D1×îÖռ̳ÐNSObject¡£ÏÂͼ´ÓD3µÄÒ»¸ö¶ÔÏó¿ªÊ¼£¬ÅÅÁгöD3
D2 D1 NSObject Àà¶ÔÏó£¬ÔªÀà¶ÔÏóµÈ¹ØÏµ¡£

ͼÖеļýÍ·¶¼ÊÇÖ¸ÕëµÄÖ¸Ïò¡£
2.4 ¸ùÀà NSObject
NSObjectÊǴ󲿷ÖObjective-CÀàµÄ¸ùÀ࣬ËüûÓи¸Àà¡£ÆäËüÀà¼Ì³ÐNSObject£¬·ÃÎÊObjective-CÔËÐÐʱϵͳµÄ»ù±¾½Ó¿Ú£¬ÕâÑùÆäËûÀàµÄʵÀý¿ÉÒÔ»ñµÃÔËÐÐʱµÄÄÜÁ¦¡£

2.4.1 ¸ùÀàºÍ¸ùÀàÐÒé
NSObject²»µ«ÊǸöÀàÃû£¬NSObjectÒ²ÊǸöÐÒéµÄÃû³Æ£¬²Î¿¼NSObjectÐÒé £¬ NSObjectÐÒéÖ¸¶¨Á˸ùÀà±ØÐëʵÏֵĽӿڡ£
2.4.2 ¸ùÀàµÄÖ÷Òª·½·¨£º
1.·ÖÅä¡¢³õʼ»¯¡¢ºÍ¸´ÖÆ£º
allocºÍallocWithZone:·½·¨ÓÃÓÚ´ÓijÄÚ´æÇøÓòÖзÖÅäÒ»¸ö¶ÔÏóÄڴ棬²¢Ê¹¶ÔÏóÖ¸ÏòÆäÔËÐÐʱµÄÀඨÒå¡£
init·½·¨ÊǶÔÏó³õʼ»¯¡£
newÊÇÒ»¸ö½«¼òµ¥µÄÄÚ´æ·ÖÅäºÍ³õʼ»¯½áºÏÆðÀ´µÄ·½·¨¡£
copyºÍcopyWithZone:
2.¶ÔÏóµÄ±£³ÖºÍÇåÀí£º
retain·½·¨Ôö¼Ó¶ÔÏóµÄ±£³Ö´ÎÊý¡£
release·½·¨¼õÉÙ¶ÔÏóµÄ±£³Ö´ÎÊý¡£
autorelease·½·¨Ò²ÊǼõÉÙ¶ÔÏóµÄ±£³Ö´ÎÊý£¬µ«ÊÇÒÔÍÆ³ÙµÄ·½Ê½¡£
retainCount·½·¨·µ»Ø¶Ôµ±Ç°µÄ±£³Ö´ÎÊý¡£
dealloc·½·¨ÓÉÐèÒªÊͷŶÔÏóµÄʵÀý±äÁ¿ÒÔ¼°ÊͷŶ¯Ì¬·ÖÅäµÄÄÚ´æµÄÀàʵÏÖ¡£
3.ÄÚÊ¡ºÍ±È½Ï
NSObjecÓкܶ෽·¨¿ÉÒÔ²éѯ¶ÔÏóµÄÔËÐÐʱÐÅÏ¢¡£ÕâЩÄÚÊ¡·½·¨ÓÐÖúÓÚÕÒ³ö¶ÔÏóÔÚÀà²ã´ÎÖеÄλÖã¬È·¶¨¶ÔÏóÊÇ·ñʵÏÖÌØ¶¨µÄ·½·¨£¬ÒÔ¼°²âÊÔ¶ÔÏóÊÇ·ñ×ñÑijÖÖÐÒé¡£ÏÂÃæÊDz¿·Ö·½·¨
superclassºÍclass·½·¨£¨ÊµÏÖΪÀàºÍʵÀý·½·¨£©·Ö±ðÒÔClass¶ÔÏóµÄÐÎʽ·µ»Ø½ÓÊÕÕߵĸ¸ÀàºÍÀà¡£
Äú¿ÉÒÔͨ¹ýisKindOfClass:ºÍisMemberOfClass:·½·¨À´È·¶¨¶ÔÏóÊôÓÚÄĸöÀà¡£ºóÕßÓÃÓÚ²âÊÔ½ÓÊÕÕßÊÇ·ñΪָ¶¨ÀàµÄʵÀý
isSubclassOfClass:Àà·½·¨ÔòÓÃÓÚ²âÊÔÀàµÄ¼Ì³ÐÐÔ¡£
respondsToSelector:·½·¨ÓÃÓÚ²âÊÔ½ÓÊÕÕßÊÇ·ñʵÏÖÓÉÑ¡ÔñÆ÷²ÎÊý±êʶµÄ·½·¨¡£instancesRespondToSelector:Àà·½·¨ÔòÓÃÓÚ²âÊÔ¸ø¶¨ÀàµÄʵÀýÊÇ·ñʵÏÖÖ¸¶¨µÄ·½·¨¡£
conformsToProtocol:·½·¨ÓÃÓÚ²âÊÔ½ÓÊÕÕߣ¨¶ÔÏó»òÀࣩÊÇ·ñ×ñѸø¶¨µÄÐÒé¡£
isEqual:ºÍhash·½·¨ÓÃÓÚ¶ÔÏóµÄ±È½Ï¡£
description·½·¨ÔÊÐí¶ÔÏó·µ»ØÒ»¸öÄÚÈÝÃèÊö×Ö·û´®£»Õâ¸ö·½·¨µÄÊä³ö¾³£ÓÃÓÚµ÷ÊÔ£¨¡°print object¡±ÃüÁ£¬ÒÔ¼°ÔÚ¸ñʽ»¯×Ö·û´®Öк͡°%@¡±Ö¸Ê¾·ûÒ»Æð±íʾ¶ÔÏó¡£
4.¶ÔÏóµÄ±àÂëºÍ½âÂë
ÏÂÃæµÄ·½·¨ºÍ¶ÔÏóµÄ±à½âÂ루×÷Ϊ¹éµµ¹ý³ÌµÄÒ»²¿·Ö£©Óйأº
encodeWithCoder:ºÍinitWithCoder:ÊÇNSCodingÐÒé½öÓеķ½·¨¡£Ç°Õßʹ¶ÔÏó¿ÉÒÔ¶ÔÆäʵÀý±äÁ¿½øÐбàÂ룬ºóÕßÔòʹ¶ÔÏó¿ÉÒÔ¸ù¾Ý½âÂë¹ýµÄʵÀý±äÁ¿¶Ô×ÔÉí½øÐгõʼ»¯¡£
NSObjectÀàÖÐÉùÃ÷ÁËһЩÓÚ¶ÔÏó±àÂëÓйصķ½·¨£ºclassForCoder:¡¢replacementObjectForCoder:¡¢ºÍawakeAfterUsingCoder:¡£
5.ÏûÏ¢µÄת·¢
forwardInvocation:ÔÊÐíÒ»¸ö¶ÔÏó½«ÏûϢת·¢¸øÁíÒ»¸ö¶ÔÏó¡£
6.ÏûÏ¢µÄÅÉ·¢
ÔÚperformSelector¿ªÍ·µÄһЩ·½·¨ÔÊÐíÄãÑÓ³ÙºóÅÉ·¢Ö¸¶¨ÏûÏ¢£¬¶øÇÒ¿ÉÒÔ½«ÏûÏ¢£¨Í¬²½»òÒì²½µÄÏûÏ¢£©´Ó¸¨ÖúÏß³ÌÅÉ·¢µ½Ö÷Ï̡߳£
2.5 Cocoa¶ÔÏóÉúÃüÖÜÆÚ
¶ÔÏóµÄËÄÖÖÄÚ´æ¹ÜÀí·½Ê½£¬ÈçÏÂͼËùʾ
¶ÔÏóµÄÉúÃüÖÜÆÚ¡ª¼ò»¯ÊÓͼ

±£³Ö½ÓÊÕµ½µÄ¶ÔÏó

¿½±´½ÓÊÕµ½µÄ¶ÔÏó

×Ô¶¯ÊͷųØ
|