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

下載本文檔

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

文檔簡介

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

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

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

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

char*argv[]){

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

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

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

char*argv[]){

@autoreleasepool{

NSLog(@"Hello,iphone!");

}

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

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

char*argv[]){@autoreleasepool{

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

return0;}轉(zhuǎn)義字符及其作用字符形式含義\”雙引號\’單引號\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ù)形式輸出)、%g(根據(jù)大小自動選f格式或e格式,且不輸出無意義的零)、%e(指數(shù)形式)float%lx十六進制無符號數(shù)%@對象%pid類接口(@interface)類接口的實現(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符號表明這是Member類的接口聲明,冒號后面指定了父類方法前面的-表明它是一個實例方法;如果是+就是一個類方法,表明其他代碼可以直接調(diào)用類方法,而不用創(chuàng)建這個類的實例方法的簽名是返回值的類型,方法的可以指定輸入?yún)?shù)的信息后面,在方法名與參數(shù)之間通過:隔開類實現(xiàn)(@implementation)類實現(xiàn)的語法:@implementation類名 方法實現(xiàn)代碼;@end類實現(xiàn)(@implementation)@implementationMember-(NSString*)name{ returnname;}-(int)age{ returnage;}-(void)setName:(NSString*)input{ [nameautorelease]; name=[inputretain];}-(void)setAge:(int)input{ age=input;}@end應用對象的兩種方法:release:

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

在將來的某個時刻釋放應用程序intmain(intargc,constchar*argv[]{ @autoreleasepool{

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

"Student.h"

@implementation

Student

@synthesize

sid,name;

-

(void)

print{

NSLog

(@"我的學號是:%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類型成員類實現(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ù)指針選擇器就是指向方法的一個指針定義方法:SEL變量名=

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

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

sel

=

@selector

(start:)

;

//

指定action

if

([obj

respondsToSelector:sel])

{

//判斷該對象是否有相應的方法

[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];最多支持兩個參數(shù),參數(shù)必須是對象,可以用指針表示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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論