Objective-C編程語言的主要目的是增加面向?qū)ο蟮?C++編程語言,類是核心支持面向?qū)ο缶幊碳?Objective-C 的特點,通常被稱為用戶定義的類型。
類是用來指定對象的形式,它結(jié)合了數(shù)據(jù)表示和方法操縱這些數(shù)據(jù)轉(zhuǎn)換成一個整齊的包。在一個類的數(shù)據(jù)和方法,被稱為類的成員。
類定義在兩個不同的部分,即 @interface 和 @implementation.
幾乎所有東西都以對象的形式。
對象接收消息和對象通常被稱為接收器。
對象包含實例變量。
對象和實例變量的范圍。
類隱藏對象的實現(xiàn)。
屬性是用來提供訪問其他類的類的實例變量。
當(dāng)定義一個類,定義的數(shù)據(jù)類型的結(jié)構(gòu)。 這實際上并不定義任何數(shù)據(jù),但它定義的類的名字的意思是什么,即是什么類的對象將包括這樣一個對象上執(zhí)行什么操作可以。
類定義開始用關(guān)鍵字 @interface 接口(類)的名稱和類主體,由一對花括號括起來。 Objective-C中所有的類都派生自基類NSObject。它是所有的Objective-C類的超類。它提供了基本的方法,如內(nèi)存分配和初始化。例如,我們定義框數(shù)據(jù)類型使用關(guān)鍵字 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
實例變量是私有的,只能訪問內(nèi)部類實現(xiàn)。
一個類提供對象的圖紙,所以基本上是一個從一個類對象被創(chuàng)建。我們聲明一個類的對象的排序完全相同的聲明,我們基本類型的變量聲明。下面的語句聲明了兩個對象,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 都會有自己的數(shù)據(jù)成員的副本。
一個類的對象的屬性可以直接使用成員訪問運算符(.)訪問。讓我們來嘗試下面的例子:
#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; }
讓我們編譯和運行上面的程序,這將產(chǎn)生以下結(jié)果:
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中引入的屬性,以確保類的實例變量可以在類的外部訪問。
各部分屬性聲明如下。這是唯一可能的屬性,我們可以訪問類的實例變量。其實內(nèi)部的屬性創(chuàng)建getter和setter方法??。
例如,讓我們假設(shè)我們有一個屬性@property (nonatomic ,readonly ) BOOL isDone。有如下圖所示,創(chuàng)建 getter 和 setter 方法??。
-(void)setIsDone(BOOL)isDone; -(BOOL)isDone;