第1章 ObjectiveC語言概述_第1頁
第1章 ObjectiveC語言概述_第2頁
第1章 ObjectiveC語言概述_第3頁
第1章 ObjectiveC語言概述_第4頁
第1章 ObjectiveC語言概述_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第一章Objective-C語言概述MACOSXMACOSX是蘋果公司為Mac系列產(chǎn)品開發(fā)的專屬操作系統(tǒng)是PC機(jī)系統(tǒng),非移動(dòng)設(shè)備的操作系統(tǒng)以UNIX為基礎(chǔ),既簡(jiǎn)單易用又功能強(qiáng)大MACOS版本OSX版本以大型貓科動(dòng)物命名:10.0獵豹(Cheetah)10.2美洲豹(Puma)10.2美洲虎(Jaguar)10.3黑豹(Panther)10.4老虎(Tiger)10.5豹子(Leopard)10.6雪豹(SnowLeopard)10.7獅子(Lion)10.8美洲獅(Mountain

Lion)

(Xcode4.5)iOS框架介紹iOS是指運(yùn)行于iPhone、iPad和iPodtouch上的操作系統(tǒng)及其相關(guān)技術(shù)的統(tǒng)稱。在操作系統(tǒng)層面上,iOS是用于管理上述移動(dòng)設(shè)備的操作系統(tǒng)。史蒂夫·喬布斯(SteveJobs)在2010年6月7日的WWDC全球開發(fā)者大會(huì)上宣布將iPhoneOS改名為iOS。Objective-C語言O(shè)bjective-C是一種面向?qū)ο蟮恼Z言1988年NeXT公司購買了Objective-C的版權(quán)1996年蘋果收購了NeXT,將NeXTSTEP重命名為Cocoa。所以Coacoa中的很多類名都是以NS開頭Objective-C是進(jìn)行iPhone軟件開發(fā)的語言O(shè)bjective-C語言是C語言的一個(gè)擴(kuò)展集,完全兼容C語言O(shè)bjective-C語言大小寫敏感程序語句必須以(;)結(jié)束在MAC操作系統(tǒng)的Terminal(應(yīng)用程序終端)中,可以使用gcc命令編譯和連接OC程序gcc–frameworkFoundationfiles–oprogname開發(fā)工具(Xcode)XCODE蘋果軟件的開發(fā)需要在蘋果電腦環(huán)境下進(jìn)行,集成開發(fā)環(huán)境為XCODE。MAC系統(tǒng)有中文版本,但是XCODE沒有中文開發(fā)版本MAC系統(tǒng)不同,所支持的XCODE版本不同,請(qǐng)看好類型后再下載。XCODE的下在需要注冊(cè)蘋果開發(fā)者賬號(hào):/programs/ios/使用真機(jī)進(jìn)行模擬需要加入蘋果開發(fā)者計(jì)劃XCODEHelloWorld——UI界面HelloWorld——UI界面HelloWorld——UI界面12Xcode界面iOS應(yīng)用程序開發(fā)方法與實(shí)踐HelloWorld——UI界面InterfaceBuild設(shè)計(jì)界面模擬器HelloWorld__命令行程序HelloWorld__命令行程序HelloWorld__命令行程序HelloWorld__命令行程序刪除程序OrganizerProjects選中項(xiàng)目刪除項(xiàng)目文件的組織結(jié)構(gòu)不同的擴(kuò)展名表示了文件的不同作用。.h:頭文件。.c:C源代碼文件。.cc或.cpp:C++源代碼文件。.m:Objective-C源代碼文件。.mm:Objective-c、C和c++代碼混用的文件。.o:編譯后的文件.pch:預(yù)編譯頭文件,用于加快處理頭文件的速度。.xib:界面定義文件。.plist:屬性列表文件。Cocoa框架Cocoa是蘋果公司的面向?qū)ο蟮膸?,該環(huán)境下的任何類都要繼承自NSObject(根類)Cocoa的主要開發(fā)語言是Objective-CCocoa包含兩個(gè)核心框架:Foundation框架和Appkit框架CocoaTouch包含兩個(gè)框架:Foundation框架和UIKit框架注:NS:NeXTSTEP開發(fā)工具XcodeIntefaceBuilderXcode:是蘋果公司的集成開發(fā)環(huán)境的發(fā)動(dòng)機(jī),它負(fù)責(zé)絕大多數(shù)的開發(fā)工作

IntefaceBuilder:它是一個(gè)用于創(chuàng)建用戶界面的圖形工具

iphone模擬器:當(dāng)臨時(shí)查看效果時(shí),可以很方便地使用模擬器進(jìn)行查看在開發(fā)中,Xcode與IntefaceBuilder是緊密結(jié)合的iphone模擬器編譯并運(yùn)行項(xiàng)目在下拉菜單中指定程序是在哪個(gè)設(shè)備或者模擬器里運(yùn)行。按下Run按鈕,或者快捷鍵?R。OSX菜單中的修飾鍵符號(hào)?:Command鍵?:控制代碼(ctrl鍵)?:Option鍵(Alt鍵)?:Shift鍵?:大寫字母鎖定Fn:功能鍵使用IB豐富程序界面InterfaceBuilder是iOSSDK提供的界面設(shè)計(jì)工具所見即所得通過圖形化拖拽的方式進(jìn)行設(shè)計(jì)界面信息與程序代碼分離使用IB豐富程序界面界面信息存儲(chǔ)在nib文件中xib文件是一個(gè)XML文件,保存對(duì)象類型與界面信息等xib文件會(huì)被編譯為二進(jìn)制形式的nib文件不管是xib文件還是nib文件,蘋果的官方說法都稱其為nib文件在對(duì)象庫窗口中選中控件,并將其拖拽至設(shè)計(jì)器中還可以設(shè)置對(duì)象類型、屬性、位置、尺寸、關(guān)聯(lián)、設(shè)置字體和顏色等信息1.5.6在iOS設(shè)備上運(yùn)行程序加入iOS開發(fā)人員計(jì)劃并安裝證書與描述文件在下拉菜單中選擇指定的設(shè)備編譯運(yùn)行iOS模擬器iOS模擬器用于對(duì)程序進(jìn)行初步的測(cè)試與調(diào)試模擬器允許進(jìn)行以下操作:進(jìn)行各種觸屏操作方位旋轉(zhuǎn)特殊情況模擬,如內(nèi)存不足切換設(shè)備類型與版本模擬器具有局限性,不能替代真實(shí)設(shè)備一定要在iOS設(shè)備上對(duì)程序進(jìn)行全面測(cè)試

代碼混用obj-c的編譯器處理后綴為m的文件時(shí),可以識(shí)別obj-c和c的代碼,處理mm文件可以識(shí)別obj-c、c、c++代碼cpp文件必須只能用c/c++代碼,cpp文件include的頭文件中,不能出現(xiàn)obj-c的代碼混用:如果模塊以類實(shí)現(xiàn),那么要按照cppclass的標(biāo)準(zhǔn)寫類的定義,頭文件中不能出現(xiàn)obj-c的內(nèi)容如果模塊以函數(shù)實(shí)現(xiàn),那么頭文件要按c的格式聲明函數(shù)總結(jié):只要cpp文件和cppinclude的文件中不包含obj-c的東西就可以用了,cpp混用obj-c的關(guān)鍵是使用接口,而不能直接使用實(shí)現(xiàn)代碼,實(shí)際上cpp混用的是obj-c編譯后的o文件第一個(gè)MACcommandline程序(xcode4.3前版本)#import<Foundation/Foundation.h>intmain(intargc,const

char*argv[]){

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSLog(@"Hello,iphone!"); [pooldrain];

return0;}第一個(gè)MACcommandline程序(xcode4.3前版本)#import<Foundation/Foundation.h>intmain(intargc,const

char*argv[]){

@autoreleasepool{

NSLog(@"Hello,iphone!");

}

return0;}第一個(gè)MACcommandline程序#import<Foundation/Foundation.h>告訴編譯器導(dǎo)入Foundation框架中的Foundation.h主頭文件OC中也可以使用#include來實(shí)現(xiàn)這個(gè)目的在C語言中程序員通常使用#ifdef命令的方案避免一個(gè)文件包含另一個(gè)文件#import可保證頭文件只被包含一次,而不論此命令實(shí)際上在哪個(gè)文件中出現(xiàn)了多少次使用尖括號(hào)表示在系統(tǒng)文件目錄中去查找,使用雙引號(hào)表示在源文件目錄去查找,若未找到將到系統(tǒng)頭文件目錄中去查找。Foundation.h為所有程序開發(fā)奠定基礎(chǔ)的框架稱為Foundation支持一些基本對(duì)象:數(shù)字、字符創(chuàng)、數(shù)組、字典、集合<Foundation/Foundation.h>:<框架名/文件名>在Xcode中選中該行command鍵+鼠標(biāo)左擊查看Foundation.h所在路徑幫助的使用使用XCode開發(fā)程序,可以通過Xcode的Help菜單中的Documentation窗口訪問文檔幫助的使用幫助的使用main函數(shù)格式:intmain(intargc,constchar*argv[])每一個(gè)程序有且只有一個(gè)main函數(shù)argc是命令行總的參數(shù)個(gè)數(shù)argv[]是argc個(gè)參數(shù),其中第0個(gè)參數(shù)是程序的全名,以后的參數(shù)是命令行后面跟的用戶輸入的參數(shù)表示程序?qū)⒃诤翁庨_始執(zhí)行。return0;0:程序正常非0:通常表示出現(xiàn)了一些問題(如:很可能無法找到程序所需的文件)注解單行注釋:使用連續(xù)的斜杠(//)多行注釋:使用/*開頭,*/結(jié)尾不能嵌套使用好處:比較清晰的指出該斷程序用意有利于團(tuán)隊(duì)合作,有利于后期的代碼維護(hù)內(nèi)存管理NSAutoreleasePool*pool=[[NSAutoreleasePool

alloc]init];可以理解為在內(nèi)存中開辟了一塊共用的內(nèi)存空間當(dāng)向一個(gè)對(duì)象發(fā)送一個(gè)autorelease消息時(shí),Cocoa就會(huì)將該對(duì)象的一個(gè)引用放入到最新的自動(dòng)釋放池。因此自動(dòng)釋放池定義的作用域內(nèi)的其它對(duì)象可以向它發(fā)送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時(shí),自動(dòng)釋放池就會(huì)被釋放,池中的所有對(duì)象也就被釋放。釋放共用的內(nèi)存空間[pooldrain];NSLog函數(shù)NSLog是Objective-C庫中的一個(gè)函數(shù)作用:向控制臺(tái)輸出文本內(nèi)容類似于C語言的printf附帶顯示內(nèi)容:執(zhí)行的時(shí)間、程序名等等NSString對(duì)象@符號(hào)在位于一對(duì)雙引號(hào)的字符串前面例:該程序輸出什么內(nèi)容?#import<Foundation/Foundation.h>intmain(intargc,const

char*argv[]){@autoreleasepool{

NSLog(@"\nTesting...\n..1\n...2\n....3"); }

return0;}轉(zhuǎn)義字符及其作用字符形式含義\”雙引號(hào)\’單引號(hào)\n換行\(zhòng)t水平制表符\\反斜線例:輸出加法結(jié)果#import<Foundation/Foundation.h>intmain(intargc,const

char*argv[]){@autoreleasepool{intsum; sum=50+20;

NSLog(@"%i",sum);}

return0;}格式化輸出字符字符形式類型%i、%dint%cchar%f(用來輸出實(shí)數(shù),以小數(shù)形式輸出)、%g(根據(jù)大小自動(dòng)選f格式或e格式,且不輸出無意義的零)、%e(指數(shù)形式)float%lx十六進(jìn)制無符號(hào)數(shù)%@對(duì)象%pid類接口(@interface)類接口的實(shí)現(xiàn)代碼:@interface類名:父類名{變量定義; //不能寫函數(shù)}方法定義;@end類接口(@interface)@interfaceMember:NSObject{ NSSting*Name; Intage;}-(NSString*)name;-(int)age;-(void)setName:(NSString*)input;-(void)setAge:(int)input;@end@interface符號(hào)表明這是Member類的接口聲明,冒號(hào)后面指定了父類方法前面的-表明它是一個(gè)實(shí)例方法;如果是+就是一個(gè)類方法,表明其他代碼可以直接調(diào)用類方法,而不用創(chuàng)建這個(gè)類的實(shí)例方法的簽名是返回值的類型,方法的可以指定輸入?yún)?shù)的信息后面,在方法名與參數(shù)之間通過:隔開類實(shí)現(xiàn)(@implementation)類實(shí)現(xiàn)的語法:@implementation類名 方法實(shí)現(xiàn)代碼;@end類實(shí)現(xiàn)(@implementation)@implementationMember-(NSString*)name{ returnname;}-(int)age{ returnage;}-(void)setName:(NSString*)input{ [nameautorelease]; name=[inputretain];}-(void)setAge:(int)input{ age=input;}@end應(yīng)用對(duì)象的兩種方法:release:

會(huì)直接刪除引用,如果沒有其他對(duì)象引用該對(duì)象了,相應(yīng)的內(nèi)存被釋放autorelease:

在將來的某個(gè)時(shí)刻釋放應(yīng)用程序intmain(intargc,constchar*argv[]{ @autoreleasepool{

Member*member=[[Memberalloc]init]; [membersetName:@”sam”]; [membersetAge:36]; NSLog(@”%@”,[membername]); NSLog(@”%i”,[memberage]); [memberrelease]; } return0;}所有的Objective-C對(duì)象都是指針類型的應(yīng)用程序運(yùn)行到[memberrelease];這行會(huì)報(bào)錯(cuò)修改:應(yīng)用程序?qū)ο舐暶鞯恼Z法:類名*var1,*var2,…;定義了一個(gè)指針變量,尚未獲得內(nèi)存空間調(diào)用alloc,才能獲得(分配)空間例如:Member*member;member=[Memberalloc];除了分配空間還需要調(diào)用init方法給對(duì)象設(shè)置初始值方法調(diào)用方法調(diào)用的格式(也叫消息表達(dá)式)[實(shí)例方法:參數(shù)1:參數(shù)2];[類名方法名];可以把返回的值放在變量上保存變量=[實(shí)例方法];OC允許在一個(gè)方法調(diào)用中嵌套另一個(gè)方法[NSStringstringWithFormat:[testformat]];盡量避免在一行代碼中嵌套調(diào)用兩個(gè)以上的方法特殊用法:self類似Java的this使用self可以調(diào)用本類中的方法,例-BOOLisQualified{ return([selfage]>21);}標(biāo)識(shí)符標(biāo)識(shí)符可以是大寫字母、小寫字母、數(shù)字、下劃線的任意順序組合,但不能以一個(gè)數(shù)字開始合法變量例子membera4flagType不合法的變量名例子#member3aflag-typeis/it/ok變量不允許連續(xù)賦值,例如a=b=c=5OC關(guān)鍵字、預(yù)定義的標(biāo)識(shí)符參考書本20-21頁指令符@指令符@數(shù)據(jù)類型整形:int,shortint或short,longint或long,unsignedint或unsigned,unsignedshort,unsignedlong實(shí)型:float,double,longdouble小數(shù)形式指數(shù)形式字符型:char常量只能用單引號(hào)括起來數(shù)字被定義為字符型后不能參與數(shù)值運(yùn)算字符串:NSString常量由@和“”的字符序列NSString不是一個(gè)簡(jiǎn)單數(shù)據(jù)類型,而是一個(gè)對(duì)象數(shù)據(jù)類型__id類型類似Java的Object類,可以轉(zhuǎn)化為任何數(shù)據(jù)類型id類型的變量可以存放任何數(shù)據(jù)類型的對(duì)象idanObject;-(id)newObject:(int)type;id在objc.h中的定義:typedefstructobjc_object{Classisa;}*id;id是指向structobjc_object的一個(gè)指針id是一個(gè)指針,所以在使用id的時(shí)候不需要加星號(hào)例如:idfoo=nil;//定義了一個(gè)nil指針,指向NSObject的任意一個(gè)子類id*foo=nil;//定義了一個(gè)指向指針的指針id取代了int類型成為默認(rèn)的數(shù)據(jù)類型數(shù)據(jù)類型__id類型例:學(xué)生類頭文件Student.h的代碼如下@property:表示聲明了對(duì)象的屬性#import

<Foundation/Foundation.h>

@interface

Student

:

NSObject

{

int

sid;

NSString

*name;

}

@property

int

sid;

@property

(nonatomic,retain)

NSString

*name;

-

(void)

print;

-

(void)

setSid:

(int)

sid

andName:

(NSString*)

name;

@end

數(shù)據(jù)類型__id類型學(xué)生類實(shí)現(xiàn)文件Student.m的代碼如下:@synthesize:表示“創(chuàng)建該屬性的訪問器”#import

"Student.h"

@implementation

Student

@synthesize

sid,name;

-

(void)

print{

NSLog

(@"我的學(xué)號(hào)是:%i,我的名字是:%@",sid,name)

;

}

-

(void)

setSid:

(int)

sid1

andName:

(NSString*)

name1{

self.sid

=

sid1;

=

name1;

}

@end

數(shù)據(jù)類型__id類型成員類頭文件Member.h的代碼如下:#import<Foundation/Foundation.h>@interfaceMember:NSObject{NSString*name;intage;}@property(nonatomic,retain)NSString*name;@propertyintage;-(void)print;-(void)setName:(NSString*)name1andAge:(int)age1;@end數(shù)據(jù)類型__id類型成員類實(shí)現(xiàn)文件Member.m的代碼如下:#import"Member.h"@implementationMember

@synthesizename,age;-(void)print{NSLog(@"我的名字是:%@,我的年齡是%i",name,age);}-(void)setName:(NSString*)name1andAge:(int)age1{=name1;self.age=age1;}@end數(shù)據(jù)類型__id類型#import<Foundation/Foundation.h>#import"Member.h"#import"Student.h“intmain(intargc,constchar*argv[]){@autoreleasepool{Member*member1=[[Memberalloc]init];[member1setName:@"Sam"andAge:36];

iddata;

data=member1;

[dataprint];Student*student1=[[Studentalloc]init];[student1setSid:1122334455andName:@"Lee"];

data=student1;

[dataprint];[student1release];[member1release];}return0;}Objective-C的其他數(shù)據(jù)類型BOOL在objc.h中,BOOL定義為typedefsignedcharBOOL;#defineYES(BOOL)1#defineNO(BOOL)0Objective-C的其他數(shù)據(jù)類型SEL類似與C語言中的函數(shù)指針選擇器就是指向方法的一個(gè)指針定義方法:SEL變量名=

@selector(方法名字);例如:-(void)setName:(NSString*)nameage:

(int)age;SELsel=@selector(setName:age:);Objective-C的其他數(shù)據(jù)類型SELrespondsToSelector方法:判斷該對(duì)象是否存在對(duì)應(yīng)的方法performSelector:withObject:方法:調(diào)用選擇器SEL

sel

=

@selector

(start:)

;

//

指定action

if

([obj

respondsToSelector:sel])

{

//判斷該對(duì)象是否有相應(yīng)的方法

[obj

performSelector:sel

withObject:self];

//調(diào)用選擇器方法

}

Objective-C的其他數(shù)據(jù)類型SELperformSelector:[selfperformSelector:@selector(noParam)withObject:nil];[selfperformSelector:@selector(oneParam:)withObject:oneParam];[selfperformSelector:@selector(oneParam:twoParam:)withObject:oneParamwithObject:twoParam];最多支持兩個(gè)參數(shù),參數(shù)必須是對(duì)象,可以用指針表示Objective-C的其他數(shù)據(jù)類型#import<Foundation/Foundation.h>@interfaceClassA:NSObject{}-(void)print;@end@implementationClassA-(void)print{ NSLog(@"I'mClassA.");}@endintmain(intargc,constchar*argv[]){@autoreleasepool{SELsel=@selector(print);ClassA*classA=[[ClassAalloc]init];[classAperformSelector:selwithObject:n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論