標籤:
轉載、引用請註明來源!
Objective-C的類
一、文法簡介1、類1)、.h檔案:類的聲明檔案,用於聲明執行個體變數和方法。類的聲明使用關鍵字@interface和@end。【.h中的方法只是聲明,不實現,也就是只說明了方法名、傳回型別、接收的參數及類型,並不會編寫方法的內部代碼】!2)、.m檔案:類的實現檔案,用於實現.h中聲明的方法。類的實現檔案使用關鍵字@implementation和@end。 2、執行個體變數執行個體變數的聲明和C語言定義變數的方法是一樣的,使用“變數類型 變數名”格式的文法。【id 類型變數表示任意物件類型】 3、執行個體變數的範圍:1)、@public (公開的)在有對象的前提下,任何地方都可以直接存取。2)、@protected (受保護的,預設就是@protected)只能在當前類和子類的對象方法中訪問。3)、@private (私人的)只能在 當前類的對象和對象方法中才能直接存取。 4、方法1)、方法的聲明和實現,都必須以 + 會 - 號開頭+ 表示類方法- 表示對象方法2)、在 .h 中聲明的所有方法範圍都是 public 。 二、建立 OC 類 1、右擊專案檔,選擇 New File 2、選擇Cocoa的 Cocoa Class
3、輸入類名(首字母通常大寫)和選擇父類、語言
這樣就建立了一個類名為People的類,父類是NSObject。 4、建立完成後,項目多了 2 個檔案
* People.h 是類的聲明檔案, People.m 是類的實現檔案。* 預設情況下, 這兩個檔案名稱與類名一致* 編譯器只會編譯 .m 檔案,不會編譯 .h 檔案。
三、類代碼解析 1、People.h — 類的聲明檔案
#import
@interface People : NSObject
@end
1)、 OC 中使用 @interface 來聲明一個類,@interface 後面緊跟類名 People 。2)、 類名 People 後面的冒號 : 表示繼承,People : NSObject 表示 People 類繼承自 NSObject 。3)、@end 表示類聲明的結束。4)、 #import , 是因為 NSObject 被聲明在 Foundation.h 中。 2、People.m — 類的實現檔案
#import "People.h"
@implementation People
@end
1)、因為 People 這個類聲明在 People.h 檔案中 ,所以要 #import "People.h" 。
2)、OC中使用關鍵字 @implementation 來實現一個類,@implementation 後的 People 表示要實現的類。
3)、 @end表示類的實現結束 。
四、新增成員變數通常情況下,我們把執行個體變數定義在類的標頭檔中,即類的聲明檔案中。1、給 People 添加執行個體變數
#import
@interface People : NSObject
{
int _age; //年齡
float _weight; //體重
}
@end
1)、添加了一個 int 類型的成員變數 _age 和 float 類型的成員變數 _weight,預設情況下成員變數的範圍是@protected [受保護的],即可以在 People 類內部和子類訪問。
2)、執行個體變數必須寫在花括弧 { } 中。
五、添加方法
前面定義了兩個執行個體變數 _age 和 _weight ,它們的範圍是 @protected ,外界不能直接存取它們。為保證資料的封裝性,我們可以提供 _age 和 _weight 的 get 和 set 方法,讓外界間接訪問 _age 和 _weight 。下面以 _age 的 get 和 set 方法為例。
1、在 People.h 中聲明方法
#import
@interface People : NSObject
{
int _age; //年齡
float _weight; //體重
}
- (void)setAge:(int) age; //age 的 set 方法聲明
- (int)age; //age 的 set 方法聲明
@end
1)、- (void)setAge:(int) age; 是 set 方法的聲明,- 表示類方法,(void)表示傳回型別,setAge:是方法名,【注意冒號也是方法名的一部分,一個冒號對應一個參數】,(int) 是參數類型,age 是參數名。
2)、- (int)age; 是 get 方法的聲明,該方法沒有參數。
2、在 People.m 中實現方法
#import "People.h"
@implementation People
//set方法的實現
- (void)setAge:(int) age{
_age = age;
}
//get方法的實現
- (int)age{
return _age;
}
@end
1)、set 方法將參數 age 賦值給執行個體變數 _age。2)、 get 方法 返回執行個體變數age。 六、建立對象 在使用一個對象之前,首先要調用類的建構函式產生對象。OC通過向類發送訊息來建立一個對象,發送alloc訊息即可建立對象: 文法:[類名 alloc]; alloc 執行後即可完成對象所需的記憶體配置,但還沒進行初始化。初始化對象的方法叫初始化方法。文法:[[類名 alloc] init]; *OC中的方法可以嵌條使用。 這樣就可以產生一個對象了。(也可以使用 new 直接產生一個對象) *建立一個 People 對象
#import
#import "People.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
People *p1 = [[People alloc] init];
}
return 0;
}
1)、因為要使用People 類,所以要包含 #import "People.h" 。
2)、OC中的方法調用使用 [ ] ,括弧左側是調用者(類 或 對象),右側是方法。
3)、分配記憶體。+(id)alloc; 方法是類方法,其傳回值是 id 類型。
4)、初始化。init方法是對象方法。
*銷毀對象:在還沒有ARC(自動釋放)機制的年代,每建立一個對象,就要手動釋放一次
即:[p1 release];
Objective-C物件導向