Objective-C教學
Objective-C 教學首頁
Objective-C 語言概述
Objective-C 開發環境(安裝配置)
Objective-C語言程序結構
Objective-C 基本語法
Objective-C 數據類型
Objective-C 變量
Objective-C 常量
Objective-C 運算符
Objective-C 算術運算符
Objective-C 關係運算符
Objective-C 邏輯運算符
Objective-C 位運算符
Objective-C 賦值運算符
Objective-C 循環
Objective-C while循環
Objective-C for循環
Objective-C do...while循環
Objective-C 嵌套循環
Objective-C break語句
Objective-C continue語句
Objective-C 決策
Objective-C if語句
Objective-C if...else 語句
Objective-C 嵌套 if 語句
Objective-C switch語句
Objective-C 嵌套switch語句
Objective-C 函數
Objective-C 函數按值調用
Objective-C 函數引用調用
Objective-C 塊
Objective-C Numbers/數字
Objective-C Arrays/數組
Objective-C 多維數組
Objective-C 數組作爲函數參數傳遞
Objective-C 從函數返回數組
Objective-C 指針的數組
Objective-C 指針
Objective-C 指針運算
Objective-C 數組的指針
Objective-C 指向指針的指針
Objective-C 傳遞函數的指針
Objective-C 函數返回指針
Objective-C NSString/字符串
Objective-C struct/結構
Objective-C 預處理器
Objective-C typedef
Objective-C 類型轉換
Objective-C 日誌處理
Objective-C 錯誤處理
命令行參數
Objective-C 類&對象
Objective-C 繼承
Objective-C 多態性
Objective-C 數據封裝
Objective-C Categories/類別
Objective-C Posing/冒充
Objective-C 擴展
Objective-C Protocols/協議
Objective-C 動態綁定
Objective-C 複合對象
Obj-C Foundation/基礎框架
Objective-C 數據存儲
Objective C 文本和字符串
Objective-C 日期和時間
Objective-C 異常處理
Objective-C 文件處理
Objective-C URL加載系統
Objective-C 快速枚舉
Objective-C 內存管理

Objective-C 類&對象

Objective-C編程語言的主要目的是增加面向對象的 C++編程語言,類是核心支持面向對象編程及 Objective-C 的特點,通常被稱爲用戶定義的類型。

類是用來指定對象的形式,它結合了數據表示和方法操縱這些數據轉換成一個整齊的包。在一個類的數據和方法,被稱爲類的成員。

Objective-C的特點

  • 類定義在兩個不同的部分,即 @interface 和 @implementation.

  • 幾乎所有東西都以對象的形式。

  • 對象接收消息和對象通常被稱爲接收器。

  • 對象包含實例變量。

  • 對象和實例變量的範圍。

  • 類隱藏對象的實現。

  • 屬性是用來提供訪問其他類的類的實例變量。

Objective-C的類定義:

當定義一個類,定義的數據類型的結構。 這實際上並不定義任何數據,但它定義的類的名字的意思是什麼,即是什麼類的對象將包括這樣一個對象上執行什麼操作可以。

類定義開始用關鍵字 @interface 接口(類)的名稱和類主體,由一對花括號括起來。 Objective-C中所有的類都派生自基類NSObject。它是所有的Objective-C類的超類。它提供了基本的方法,如內存分配和初始化。例如,我們定義框數據類型使用關鍵字 class 如下:

@interface Box:NSObject { //Instance variables double length; // Length of a box double breadth; // Breadth of a box } @property(nonatomic, readwrite) double height; // Property @end

實例變量是私有的,只能訪問內部類實現。

Objective-C 對象分配和初始化:

一個類提供對象的圖紙,所以基本上是一個從一個類對象被創建。我們聲明一個類的對象的排序完全相同的聲明,我們基本類型的變量聲明。下面的語句聲明瞭兩個對象,Box類:

Box box1 = [[Box alloc]init]; // Create box1 object of type Box Box box2 = [[Box alloc]init]; // Create box2 object of type Box

兩個對象box1和box2 都會有自己的數據成員的副本。

訪問的數據成員:

一個類的對象的屬性可以直接使用成員訪問運算符(.)訪問。讓我們來嘗試下面的例子:

#import <Foundation/Foundation.h> @interface Box:NSObject { double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box } @property(nonatomic, readwrite) double height; // Property -(double) volume; @end @implementation Box @synthesize height; -(id)init { self = [super init]; length = 1.0; breadth = 1.0; return self; } -(double) volume { return length*breadth*height; } @end int main( ) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Box *box1 = [[Box alloc]init]; // Create box1 object of type Box Box *box2 = [[Box alloc]init]; // Create box2 object of type Box double volume = 0.0; // Store the volume of a box here // box 1 specification box1.height = 5.0; // box 2 specification box2.height = 10.0; // volume of box 1 volume = [box1 volume]; NSLog(@"Volume of Box1 : %f", volume); // volume of box 2 volume = [box2 volume]; NSLog(@"Volume of Box2 : %f", volume); [pool drain]; return 0; }

讓我們編譯和運行上面的程序,這將產生以下結果:

2013-09-22 21:25:33.314 ClassAndObjects[387:303] Volume of Box1 : 5.000000
2013-09-22 21:25:33.316 ClassAndObjects[387:303] Volume of Box2 : 10.000000

屬性:

Objective-C中引入的屬性,以確保類的實例變量可以在類的外部訪問。

各部分屬性聲明如下。

  • 屬性由@property開始,這是一個關鍵字
  • 其次是訪問指示符,非原子或原子,讀寫或只讀強,unsafe_unretained 或弱。變化根據不同的變量。對於任何類型的指針,我們可以使用強大或unsafe_unretained。同樣,對於其他類型,我們可以使用讀寫或只讀。
  • 其次是數據類型的變量。
  • 最後,我們必須以分號結束的屬性名稱。
  • 我們可以在實現類中添加合成語句。但在最新的Xcode,合成部分XCode在生成,需要不包括合成語句。

這是唯一可能的屬性,我們可以訪問類的實例變量。其實內部的屬性創建getter和setter方法​​。

例如,讓我們假設我們有一個屬性@property (nonatomic ,readonly ) BOOL isDone。有如下圖所示,創建 getter 和 setter 方法​​。

-(void)setIsDone(BOOL)isDone; -(BOOL)isDone;