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;