成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Objective-C 入門學習 從O開始

移動開發 iOS
本文介紹的是Objective-C 入門學習 從O開始,主要介紹Objective-C的基本語法,傳統的面向對象語言的封裝等內容,我們先來看內容。

Objective-C 入門學習 從O開始 是本文要介紹的內容,Objective-C的基本語法,傳統的面向對象語言的封裝,繼承以及多態在Objective-C上會是什么樣子。適合于熟悉面向對象編程的讀者。

Objective-C:加強版的C?

Objective-C是基于標準的ANSI C的一門面向對象語言。其語法和設計主要基于Smalltalk,所以有些類似,而且支持標準的C語言語法。代碼文件的類型有三種:[.h]頭文件,[.m]C代碼,[.mm]C++代碼。定義了一種新的調用頭文件的方法#import,這樣不會重復#include頭文件,只在沒有調用過的時候調用一次,類似于PHP的require_once。

最常用的數據類型:字符串NSString

Objective-C將字符串數據類型定義成為Class,支持可變長度的字符串,支持Unicode等等一些實用的方法。通過使用@標志符,可以方便的由字符串常量定義NSString對象。下面給出一些定義NSString的代碼實例。

  1. NSString *string1 = @"const string";  
  2. NSString *string2 = [NSString stringWithFormat:@"%d %d %s", 1, 2, "hello string"]; 

類(Class)

作為面向對象語言最基本也是最重要的數據類型,Objective-C當然不會不支持。Objective-C定義類的特點在于先在.h頭文件里定義接口,然后在.m代碼文件里實現。

關于.h頭文件的具體的語法看下面的圖更直接一點。

Objective-C 入門學習 從O開始

關于.m代碼文件的具體語法也請參考下面的圖。

Objective-C 入門學習 從O開始

大家注意一下initWithUserName()方法的返回值的數據類型為id,是不是感覺這個一般的語言有點區別。其實,這種數據類型類似于C++的指針。在Objective-C里面仍然叫做指針類型。Objective-C的對象的定義,可以支持強類型的實例,以及弱類型的實例的定義。簡單的說,強類型就是定義該實例的時候必須指明類的名字,弱類型就是沒有指明類的名字。下面給大家看看實際的代碼就會明白,定義這兩者的時候的區別。

  1. MYHelloWorld *myHelloWorld1;        // 強類型(Strong typing)  
  2. id            myHelloWorld2;        // 弱類型(Weak typing) 

順別提一下,弱類型能給實現設計模式(Design Patterns)的時候帶來很大的方便。

方法(Methods)

方法Methods又可稱為函數。在Objective-C里的類可以定義兩種方法。一種是實例的方法,一種是類的方法。實例的方法局限于某個類的實例,也就是必須定義這個類的實例之后,才能被調用執行的方法。類的方法不需要創建實例,直接通過類的名稱就可以被調用執行的方法。

定義一個方法需要:方法名(一個或者多個關鍵字),返回值類型,參數類型和參數名。下面這的圖詳細的說明了如何定義一個實例的方法,其中負號[-]表示該方法為實例的方法,該方法的名稱加上各個關鍵字包括冒號即為[insertValue:atIndex:]。

Objective-C調用方法是通過發送消息給對應的實例對象。發送消息的方式其實是和一般的編程語言一樣就是調用實例對象的方法,Objective-C獨特的地方就是方法的調用是通過一個方法名+零個或多個標示符+零個或多個參數,然而一般的編程語言只需要一個方法名+零個或多個參數就可以了。

Objective-C里面之所以把調用方法稱為發送消息,大概是因為所有的消息發送之后都是動態傳遞給實例對象的。并且,如果一個子類定義了一個和父類相同方法名+標示符的方法之后,子類會先收到該消息,然后選擇性的是否繼續將該消息傳遞給父類。

發送消息是通過一對方括號[]來實現的。在括號的里面,實例對象在左邊,消息以及參數等的定義在右邊。例如:

  1. [anObject insertValue:anObj atIndex:1]; 

為了避免生成多余的臨時變量,Objecttive-C容許直接使用消息的結果。如下例:

  1. [[anObject getArray] insertValue:[anObject getValueToInsert] atIndex:0]; 

類的方法,類似于靜態方法(Static Function),常用于作為工廠模式中用來生成新的實例。定義的時候和實例的方法有區別的地方就是開頭的符號為加號[+]。調用的類的方法和調用(Static Function)基本相同,直接通過類名就可以,如下例:

  1. NSMutableArray*   myArray = nil;    // nil等同于通常的NULL  
  2.    
  3. // 創建一個動態數組,并且制定最初的大小  
  4. myArray = [NSMutableArray arrayWithCapacity:19]; 

屬性

屬性是一個可以取代方法的方便符號。在類中聲明定義屬性時,并不創建新的實例,就是一個能夠方便快捷的用來訪問實際已經存在的變量的方法。也就是說,屬性其實并沒有真正的存儲任何數據。

其實屬性是可以讓你在編寫代碼時減少影響效率的冗余代碼。簡單的說屬性要比getter和setter方法快。

屬性還可以定義一些訪問該屬性時的限制或者如何獲取該屬性,例如指定copy用來復制該屬性,readonly用來指定該屬性只讀。

  1. @property BOOL workFlag;  
  2. @property (copy) NSString* oString;  // 通過復制來使用該屬性.  
  3. @property (readonly) UIView* oView;  // 定義一個類似于getter的屬性. 

調用某實例的屬性有兩種方法,一種是通過括號,和調用方法類似,另外一種是通過點符號[.]。第二方法比較方便,也符合大多數開發人員的習慣。

  1. // 第一種調用方法  
  2. [myObject setFlag:YES];  
  3. CGRect   viewFrame = [[myObject rootView] frame];  
  4. // 第二種調用方法  
  5. myObject.flag = YES;  
  6. CGRect   viewFrame = myObject.rootView.frame; 

協議和委托(Protocols and Delegates)

Objective-C中的協議(Protocol)類似于常用的接口,協議(Protocols)中定義的方法,在類中實現。

  1. @protocol MyFirstProtocol  
  2.     - (void)myFirstProtocolMethod;  
  3. @end 

iPhone OS中,協議(Protocol)通常用來實現委托對象(Delegate Object)。委托對象(Delegate Object)一般用來自己定義行為或者動作,也就是調用自己定義方法,但自己不實現該方法,委托其它的類來實現該方法。

UIApplication類就是一個典型的例子。UIApplication類中定義了一個應用程序應有的行為或者動作。而不是強制讓你的UIApplication子類去接受當前應用程序的狀態消息并做出相應處理。UIApplication類通過調用特殊的方法,來傳遞這些消息給它的委托對象。這個委托對象通過實現名為UIApplicationDelegate的協議(Protocol),之后就可以接受到當前應用程序的狀態消息并做出相應處理。比如內存不夠的錯誤,應用程序被中斷等重要消息。

下面給出一段關于HelloWorld的實例代碼:

  1. //main.m  
  2. #import  
  3. int main(int argc, char *argv[])  
  4. {  
  5.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
  6.     int retVal = UIApplicationMain(argc, argv, nil, nil);  
  7.     [pool release];  
  8.     return retVal;  

本文到這里就結束了,如果您有什么意見請在下面發表評論。本文只是針對有一定編程經驗的開發人員,簡單的介紹了Objective-C的主要特征。本站將會陸續推出各種iPhone開發的相關資訊,敬請大家關注。

小結:關于Objective-C 入門學習 從O開始的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-05-11 15:58:34

Objective-C

2011-05-11 14:06:49

Objective-C

2011-08-04 14:58:37

Objective-C Cocoa NSString

2013-08-21 14:57:42

objective-c問題

2010-11-04 16:32:00

Objective-C

2011-07-06 14:12:14

Objective-C

2011-08-17 12:03:36

Objective-C

2011-05-11 15:19:01

CocoaObjective-C

2011-07-25 10:03:06

Objective-C 委托

2011-08-05 14:03:39

Objective-C 對象 模板

2014-07-01 09:22:01

SwiftObjective-CiOS

2015-06-25 11:21:33

C++Objective-C

2011-07-25 10:30:41

Objective-C Xcode 重構

2011-07-25 11:02:29

Objective-C Xcode 標簽

2011-07-25 10:14:13

Objective-C Xcode

2010-09-01 09:19:33

Objective-CiPhone開發iPhone

2011-08-15 17:06:01

Objective-CNSLog

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用鍵

2011-08-10 18:07:29

Objective-C反射

2013-06-20 10:40:32

Objective-C實現截圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一二区视频 | 作爱视频免费看 | 成人精品一区二区 | 在线欧美亚洲 | 热99在线 | 亚洲精品免费视频 | 精品国产乱码一区二区三区 | 91精品导航 | 国产精品欧美一区二区 | 91麻豆精品国产91久久久久久久久 | 日本黄色免费大片 | 国产一区二区影院 | 国产美女精品视频 | 中文字幕在线播放第一页 | 日本色综合 | 亚洲福利一区二区 | 免费网站国产 | 国产伦精品一区二区三区在线 | 日韩在线三级 | 久久天天躁狠狠躁夜夜躁2014 | 黑人巨大精品欧美一区二区免费 | 欧美国产亚洲一区二区 | 亚洲精品久久久久久久不卡四虎 | 亚洲顶级毛片 | 天天爽夜夜爽精品视频婷婷 | a国产一区二区免费入口 | 久久精品国产久精国产 | 高清视频一区二区三区 | 久久亚洲欧美日韩精品专区 | 国产精品久久久久久亚洲调教 | 午夜精品久久久久久久99黑人 | 日本91av视频 | 国产激情视频网址 | 国产成人综合一区二区三区 | 中文字幕一区二区三区在线观看 | 精品国产一区二区三区久久久久久 | 国产精品久久久久久一级毛片 | 国产精品福利在线 | 日韩精品在线播放 | 在线观看黄色大片 | www.中文字幕.com |