Objective-C編程語言的主要目的是為C編程語言添加面向對象,類是Objective-C的核心特性,支持面向對象編程,通常稱為用戶定義類型。
類用於指定對象的形式,它將數據表示和方法組合在一起,以便將數據操作到一個整齊的包中。 類中的數據和方法稱為類的成員。
1. Objective-C特徵
- 類定義在兩個不同的部分,即
@interface
和@implementation
。 - 幾乎所有東西都是對象的形式。
- 對象接收消息,對象通常稱為接收者。
- 對象包含實例變數。
- 對象和實例變數具有範圍。
- 類隱藏對象的實現。
- 屬性用於提供用於其他類對此類實例變數的訪問。
2. Objective-C類定義
定義類時,可以為數據類型定義藍圖(或範本)。 但實際上並沒有定義任何數據,但它確實定義了類名的含義,即類的對象將包含什麼以及可以對這樣的對象執行什麼操作。
類定義以關鍵字@interface
開頭,後跟介面(類)名稱; 和一個由一對花括弧括起來的類體。 在Objective-C中,所有類都派生自名為NSObject
的基類。 它是所有Objective-C類的超類。 它提供了記憶體分配和初始化等基本方法。 例如,使用關鍵字class
定義Box
類,如下所示 -
@interface Box:NSObject {
//實例變數
double length; // Length of a box
double breadth; // Breadth of a box
}
@property(nonatomic, readwrite) double height; // Property
@end
實例變數是私有的,只能在類實現中訪問。
3. 分配和初始化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
這兩個對象都有自己的數據成員副本。
4. 訪問數據成員
使用成員訪問運算符(.
)訪問類對象的屬性。嘗試下麵的例子來理解 -
#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 分配值
box1.height = 15.0;
// box 2 分配值
box2.height = 20.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;
}
執行上面示例代碼,得到以下結果:
$main
2018-11-16 01:29:42.781 main[106799] Volume of Box1 : 15.000000
2018-11-16 01:29:42.782 main[106799] Volume of Box2 : 20.000000
5. 屬性
在Objective-C中引入了屬性,以確保可以在類外部訪問類的實例變數。
各部分屬性聲明如下 -
- 屬性以
@property
開頭,它是一個關鍵字 - 接下來是訪問說明符,它們是非原子,讀寫或只讀,強,不安全或不完整。 這取決於變數的類型。 對於任何指針類型,可以使用
strong
,unsafe_unretained
或weak
。 類似地,對於其他類型,可以使用readwrite
或readonly
。 - 接下來是變數的數據類型。
- 最後,將屬性名稱以分號結束。
- 在實現類中添加
synthesize
語句。 但是在最新的XCode
中,合成部分由XCode
處理,不需要包含synthesize
語句。
只有屬性才能訪問類的實例變數。 實際上,為屬性創建了內部getter
和setter
方法。
例如,假設有一個屬性@property(nonatomic,readonly)BOOL isDone
。 創建了setter
和getter
,如下所示。
-(void)setIsDone(BOOL)isDone;
-(BOOL)isDone;
上一篇:
Objective-C命令行參數
下一篇:
Objective-C繼承