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

下載本文檔

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

文檔簡介

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

IntefaceBuilder:它是一個用于創建用戶界面的圖形工具

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

代碼混用obj-c的編譯器處理后綴為m的文件時,可以識別obj-c和c的代碼,處理mm文件可以識別obj-c、c、c++代碼cpp文件必須只能用c/c++代碼,cpp文件include的頭文件中,不能出現obj-c的代碼混用:如果模塊以類實現,那么要按照cppclass的標準寫類的定義,頭文件中不能出現obj-c的內容如果模塊以函數實現,那么頭文件要按c的格式聲明函數總結:只要cpp文件和cppinclude的文件中不包含obj-c的東西就可以用了,cpp混用obj-c的關鍵是使用接口,而不能直接使用實現代碼,實際上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來實現這個目的在C語言中程序員通常使用#ifdef命令的方案避免一個文件包含另一個文件#import可保證頭文件只被包含一次,而不論此命令實際上在哪個文件中出現了多少次使用尖括號表示在系統文件目錄中去查找,使用雙引號表示在源文件目錄去查找,若未找到將到系統頭文件目錄中去查找。Foundation.h為所有程序開發奠定基礎的框架稱為Foundation支持一些基本對象:數字、字符創、數組、字典、集合<Foundation/Foundation.h>:<框架名/文件名>在Xcode中選中該行command鍵+鼠標左擊查看Foundation.h所在路徑幫助的使用使用XCode開發程序,可以通過Xcode的Help菜單中的Documentation窗口訪問文檔幫助的使用幫助的使用main函數格式:intmain(intargc,constchar*argv[])每一個程序有且只有一個main函數argc是命令行總的參數個數argv[]是argc個參數,其中第0個參數是程序的全名,以后的參數是命令行后面跟的用戶輸入的參數表示程序將在何處開始執行。return0;0:程序正常非0:通常表示出現了一些問題(如:很可能無法找到程序所需的文件)注解單行注釋:使用連續的斜杠(//)多行注釋:使用/*開頭,*/結尾不能嵌套使用好處:比較清晰的指出該斷程序用意有利于團隊合作,有利于后期的代碼維護內存管理NSAutoreleasePool*pool=[[NSAutoreleasePool

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

char*argv[]){@autoreleasepool{

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

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

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

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

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

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

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

Member*member=[[Memberalloc]init]; [membersetName:@”sam”]; [membersetAge:36]; NSLog(@”%@”,[membername]); NSLog(@”%i”,[memberage]); [memberrelease]; } return0;}所有的Objective-C對象都是指針類型的應用程序運行到[memberrelease];這行會報錯修改:應用程序對象聲明的語法:類名*var1,*var2,…;定義了一個指針變量,尚未獲得內存空間調用alloc,才能獲得(分配)空間例如:Member*member;member=[Memberalloc];除了分配空間還需要調用init方法給對象設置初始值方法調用方法調用的格式(也叫消息表達式)[實例方法:參數1:參數2];[類名方法名];可以把返回的值放在變量上保存變量=[實例方法];OC允許在一個方法調用中嵌套另一個方法[NSStringstringWithFormat:[testformat]];盡量避免在一行代碼中嵌套調用兩個以上的方法特殊用法:self類似Java的this使用self可以調用本類中的方法,例-BOOLisQualified{ return([selfage]>21);}標識符標識符可以是大寫字母、小寫字母、數字、下劃線的任意順序組合,但不能以一個數字開始合法變量例子membera4flagType不合法的變量名例子#member3aflag-typeis/it/ok變量不允許連續賦值,例如a=b=c=5OC關鍵字、預定義的標識符參考書本20-21頁指令符@指令符@數據類型整形:int,shortint或short,longint或long,unsignedint或unsigned,unsignedshort,unsignedlong實型:float,double,longdouble小數形式指數形式字符型:char常量只能用單引號括起來數字被定義為字符型后不能參與數值運算字符串:NSString常量由@和“”的字符序列NSString不是一個簡單數據類型,而是一個對象數據類型__id類型類似Java的Object類,可以轉化為任何數據類型id類型的變量可以存放任何數據類型的對象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類型成為默認的數據類型數據類型__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

數據類型__id類型學生類實現文件Student.m的代碼如下:@synthesize:表示“創建該屬性的訪問器”#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

數據類型__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數據類型__id類型成員類實現文件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數據類型__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的其他數據類型BOOL在objc.h中,BOOL定義為typedefsignedcharBOOL;#defineYES(BOOL)1#defineNO(BOOL)0Objective-C的其他數據類型SEL類似與C語言中的函數指針選擇器就是指向方法的一個指針定義方法:SEL變量名=

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

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

sel

=

@selector

(start:)

;

//

指定action

if

([obj

respondsToSelector:sel])

{

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

[obj

performSelector:sel

withObject:self];

//調用選擇器方法

}

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

評論

0/150

提交評論