在開始之前必須要有一個模擬情境來建立我們的物件,例如寫一個可以存放學生身高體重的物件(Student Class),並且日後希望在建立這個物件時就可以同時設定這兩項數值,下面就先來看一下這個物件大致上的結構。
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject {
//宣告兩個整數參數用來紀錄身高體重
int height;
int weight;
}
@property int height, weight;
@end
使用 @property 自動產生 setter 與 getter 方法,用來改變與取得身高體重兩個變數。
Student.m
#import "Student.h"
@implementation Student
@synthesize height, weight;
@end
在實作中使用 @synthesize 可以自動實作 @property 自動產生的 setter 與 getter 方法,關於 setter 與 getter 方法,請參考變數的 Setter 與 Getter 一文。
程式碼到這裡還沒有位寫入對此類別進行初始化的方法,勉強只能使用 alloc 來分配記憶體位置,之後在分別給予兩個參數不同的值,這樣很麻煩、效率也很低。所以下面我們將新增一個函式來初始化 Student 這個物件。
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject {
//宣告兩個整數參數用來紀錄身高體重
int height;
int weight;
}
@property int height, weight;
- (Student *)initWithHeight:(int)h andWeight:(int)w;
@end
在這裡我們遵循 Objective-C 的命名方式,初始化以 init 開頭並使用 With 來表示在初始化時所要給予的參數值。
Student.m
#import "Student.h"
@implementation Student
@synthesize height, weight;
- (Student *)initWithHeight:(int)h andWeight:(int)w {
self = [super init];
if (self) {
height = h;
weight = w;
}
return self;
}
@end
上述程式碼演示了一個簡單的初始化過程,首先是建立與自己相同型態的實體(Student),之後式判斷實體是否存在(是否建立成功),如果是,就設定這兩個參數的數值,因為唯有實體建立成功才有辦法對這兩個參數進行設定,否則會出現 crash 的現象,最後傳再回一個 Student 型態的物件(實體)。
有了初始化的函式之後,在使用上也變得相當簡單,在引用 Student 的標頭檔之後就可以開始使用。
#import "Student.h"
在引用標頭檔時有一個原則,如果不是系統本身的標頭檔必須使用雙引號標記 " " ,反之則使用角括號標記 < >。
下列程式碼則是使用上得範例,由於使用了指令 alloc 來分配記憶體位置,因此請記得在使用完該物件之後必須要釋放記憶體,避免造成 Memory Leak的窘境。
Student *studentA, *studentB;
studentA = [[Student alloc] initWithHeight:184 andWeight:75];
studentB = [[Student alloc] initWithHeight:165 andWeight:48];
[studentA release];
[studentB release];
沒有留言:
張貼留言