Learing Object CA Primer.docx
- 文档编号:7036813
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:8
- 大小:74.68KB
Learing Object CA Primer.docx
《Learing Object CA Primer.docx》由会员分享,可在线阅读,更多相关《Learing Object CA Primer.docx(8页珍藏版)》请在冰豆网上搜索。
LearingObjectCAPrimer
LearningObjective-C:
APrimer
TheObjective-Clanguageisasimplecomputerlanguagedesignedtoenablesophisticatedobject-orientedprogramming.Objective-CextendsthestandardANSIClanguagebyprovidingsyntaxfordefiningclasses,andmethods,aswellasotherconstructsthatpromotedynamicextensionofclasses.
Important:
Thisdocumentdoesn’tattempttoteachanyaspectsoftheClanguage.Ifyou’renotfamiliarwithC,youshouldlearnaboutthebasicsbeforeyouproceed.
Youalsoneedtohaveatleastabasicunderstandingofconceptsrelatedtoobject-orientedprogrammingbeforeproceeding.Theuseofobjectsandobject-orienteddesignpatternsisfundamentaltothedesignofCocoaapplications,andunderstandinghowtheyinteractiscriticaltocreatingyourapplications.Foranoverviewofconcepts,seeObject-OrientedProgrammingwithObjective-C.Inaddition,seeCocoaFundamentalsGuideforinformationaboutthedesignpatternsusedinCocoa.
IfyouarefamiliarwithCandhaveprogrammedwithobject-orientedlanguagesbefore,thefollowinginformationshouldhelpyoulearnthebasicsyntaxofObjective-C.Manyofthetraditionalobject-orientedconcepts,suchasencapsulation,inheritance,andpolymorphism,areallpresentinObjective-C.Thereareafewimportantdifferences,butthosedifferencesarecalledoutinthisarticleandmoredetailedinformationisavailableifyouneedit.
ForfulldetailsoftheObjective-Clanguageandsyntax,seeTheObjective-CProgrammingLanguage.
Contents:
Objective-C:
ASupersetofC
Classes
MethodsandMessaging
DeclaredProperties
Strings
Protocols
ForMoreInformation
Objective-C:
ASupersetofC
Objective-CisasupersetoftheANSIversionoftheCprogramminglanguageandsupportsthesamebasicsyntaxasC.AswithCcode,youdefineheaderfilesandsourcefilestoseparatepublicdeclarationsfromtheimplementationdetailsofyourcode.Objective-CheaderfilesusethefileextensionslistedinTable1-1.
Table1-1 FileextensionsforObjective-Ccode
Extension
Sourcetype
.h
Headerfiles.Headerfilescontainclass,type,function,andconstantdeclarations.
.m
Sourcefiles.ThisisthetypicalextensionusedforsourcefilesandcancontainbothObjective-CandCcode.
.mm
Sourcefiles.AsourcefilewiththisextensioncancontainC++codeinadditiontoObjective-CandCcode.ThisextensionshouldbeusedonlyifyouactuallyrefertoC++classesorfeaturesfromyourObjective-Ccode.
Whenyouwanttoincludeheaderfilesinyoursourcecode,youtypicallyusea#importdirective.Thisislike#include,exceptthatitmakessurethatthesamefileisneverincludedmorethanonce.TheObjective-Csamplesanddocumentationallprefertheuseof#import,andyourowncodeshouldtoo.
Classes
Asinmostotherobject-orientedlanguages,classesinObjective-Cprovidethebasicconstructforencapsulatingsomedatawiththeactionsthatoperateonthatdata.Anobjectisaruntimeinstanceofaclass,andcontainsitsownin-memorycopyoftheinstancevariablesdeclaredbythatclassandpointerstothemethodsoftheclass.
ThespecificationofaclassinObjective-Crequirestwodistinctpieces:
theinterfaceandtheimplementation.Theinterfaceportioncontainstheclassdeclarationanddefinestheinstancevariablesandmethodsassociatedwiththeclass.Theinterfaceisusuallyina.hfile.Theimplementationportioncontainstheactualcodeforthemethodsoftheclass.Theimplementationisusuallyina.mfile.
Figure1-1showsthesyntaxfordeclaringaclasscalledMyClass,whichinheritsfromCocoa’sbaseclass,NSObject.Theclassdeclarationbeginswiththe@interfacecompilerdirectiveandendswiththe@enddirective.Followingtheclassname(andseparatedfromitbyacolon)isthenameoftheparentclass.Theinstancevariablesoftheclass(sometimesreferredtoas“ivars”,andinsomeotherlanguagescalled“membervariables”)aredeclaredinacodeblockthatisdelineatedbybraces({and}).Followingtheinstancevariableblockisthelistofmethodsdeclaredbytheclass.Asemicoloncharactermarkstheendofeachinstancevariableandmethoddeclaration.
Figure1-1 Aclassdeclaration
Note:
Thisinterfacedeclaresonlymethods;classescanalsodeclareproperties.Formoreinformationonproperties,see“DeclaredProperties”.
Objective-Csupportsbothstrongandweaktypingforvariablescontainingobjects.Stronglytypedvariablesincludetheclassnameinthevariabletypedeclaration.Weaklytypedvariablesusethetypeidfortheobjectinstead.Weaklytypedvariablesareusedfrequentlyforthingssuchascollectionclasses,wheretheexacttypeoftheobjectsinacollectionmaybeunknown.Ifyouareusedtousingstronglytypedlanguages,youmightthinkthattheuseofweaklytypedvariableswouldcauseproblems,buttheyactuallyprovidetremendousflexibilityandallowformuchgreaterdynamisminObjective-Cprograms.
Thefollowingexampleshowsstronglyandweaklytypedvariabledeclarations:
MyClass*myObject1;//Strongtyping
idmyObject2;//Weaktyping
Noticethe*inthefirstdeclaration.InObjective-C,objectreferencesarepointers.Ifthisdoesn’tmakecompletesensetoyou,don’tworry—youdon’thavetobeanexpertwithpointerstobeabletostartprogrammingwithObjective-C.Youjusthavetoremembertoputthe*infrontofthevariablenamesforstrongly-typedobjectdeclarations.Theidtypeimpliesapointer.
MethodsandMessaging
AclassinObjective-Ccandeclaretwotypesofmethods:
instancemethodsandclassmethods.Aninstancemethodisamethodwhoseexecutionisscopedtoaparticularinstanceoftheclass.Inotherwords,beforeyoucallaninstancemethod,youmustfirstcreateaninstanceoftheclass.Classmethods,bycomparison,donotrequireyoutocreateaninstance,butmoreonthatlater.
Thedeclarationofamethodconsistsofthemethodtypeidentifier,areturntype,oneormoresignaturekeywords,andtheparametertypeandnameinformation.Figure1-2showsthedeclarationoftheinsertObject:
atIndex:
instancemethod.
Figure1-2 Methoddeclarationsyntax
Thisdeclarationisprecededbyaminus(-)sign,whichindicatesthatthisisaninstancemethod.Themethod’sactualname(insertObject:
atIndex:
)isaconcatenationofallofthesignaturekeywords,includingcoloncharacters.Thecoloncharactersdeclarethepresenceofaparameter.Ifamethodhasnoparameters,youomitthecolonafterthefirst(andonly)signaturekeyword.Inthisexample,themethodtakestwoparameters.
Whenyouwanttocallamethod,youdosobymessaginganobject.Amessageisthemethodsignature,alongwiththeparameterinformationthemethodneeds.Allmessagesyousendtoanobjectaredispatcheddynamically,thusfacilitatingthepolymorphicbehaviorofObjective-Cclasses.
Messagesareenclosedbybrackets([and]).Insidethebrackets,theobjectreceivingthemessageisontheleftsideandthemessage(alongwithanyparametersrequiredbythemessage)isontheright.Forexample,tosendtheinsertObject:
atIndex:
messagetoanobjectinthemyArrayvariable,youwouldusethefollowingsyntax:
[myArrayinsertObject:
anObjectatIndex:
0];
Toavoiddeclaringnumerouslocalvariablestostoretemporaryresults,Objective-Cletsyounestmessages.Thereturnvaluefromeachnestedmessageisusedasaparameter,orasthetarget,ofanothermessage.Forexample,youcouldreplaceanyofthevariablesusedinthepreviousexamplewithmessagestoretrievethevalues.Thus,ifyouhadanotherobjectcalledmyAppObjectthathadmethodsforaccessingthearrayobjectandtheobjecttoinsertintothearray,youcouldwritetheprecedingexampletolooksomethinglikethefollowing:
[[myAppObjecttheArray]insertObject:
[myAppObjectobjectToInsert]atIndex:
0];
Objective-Calsoprovidesadotsyntaxforinvokingaccessormethods.Accessormethodsgetandsetthestateofanobject,andtypicallytaketheform-(type)propertyNameand-(void)setPropertyName:
(type).Usingdotsyntax,youcouldrewritethepreviousexampleas:
[myAppObject.theArrayinsertObject:
[myAppObjectobjectToInsert]atIndex:
0];
Youcanalsousedotsyntaxforassignment:
myAppObject.theArray=aNewArray;
Thisissimplyadifferentsyntaxforwriting,[myAppObjectsetTheArray:
aNewArray];.
Althoughtheprecedingexamplessentmessagestoaninstanceofaclass,youcanalsosendmessagestotheclassitself.Whenmessagingaclass,themethodyouspecifymustbedefinedasaclassmethodinsteadofaninstancemethod.
Youtypicallyuseclassmethodsasfactorymethodstocreatenewinstancesoftheclassorforaccessingsomepieceofsharedinformationassociatedwiththeclass.Thesyntaxforaclassmethoddeclarationisidenticaltothatofaninstancemethod,withoneexception.Insteadofusingaminussignforthemethodtypeidentifier,youuseaplus(+)sign.
Thefollowingexampleillustrateshowyouuseaclassmethodasafactorymethodforaclass.Inthiscase,thearraymethodisaclassmethodontheNSArrayclass—andinheritedbyNSMutableArray—thatallocatesandinitializesanewinstanceoftheclassandreturnsittoyourcode.
NSMutableArray*myArray=nil;//nilisessentiallythesameasNULL
//CreateanewarrayandassignittothemyArrayvariable.
myArray=[NSMutableArrayarray];
Listing1-1showstheimplementationofMyClassfromtheprecedingexample.Liketheclassdeclaration,theclassimplementationisidentifiedbytwocompilerdirectives—here,@implementationand@end.Thesedirectivesprovidethescopinginformationthecompilerneedstoassociatetheenclosedmethodswiththecorrespondingclass.Amethod’sdefinitionthereforematc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Learing Object Primer