2014
Feb
03
這篇文章主要會說明如果寫一個 Class 物件,並多次重複建構使用。
等一下我要建立一個物件,這是一個簡單的 list 清單,透過 add 增加一項新資料,再用 remove 清除一項資料,最後使用 print 印出所有的訊息。
我要先增加一組檔案 header (.h) 與 implement (.m),這裡選擇 「Objective-C class」即可,選好後並命名為 「list 」, Xcode 會自動建立這兩個檔案 list.h 與 list.m 。
list.h header
list.h 是 list 這個物件的 header file,我要宣告 list 物件的 property 與 method 。
- Property 宣告: @property (strong, nonatomic) NSMutableArray* data;
- Method 宣告: - (void) add: (NSString *) name
list.h
- #import <Foundation/Foundation.h>
- @interface list : NSObject
- @property (strong, nonatomic) NSMutableArray* data;
- - (id) init; //construct
- - (void) dealloc; //destruct
- - (void) add:(NSString *)name; //add a new data
- - (void) remove:(NSString *)name; //remove a data
- - (void) print; //print result
- @end
implement class
construct
Obj-C 的 construct 方式是使用 init ,並且要 return self。
我在 header 中已經宣告一個 NSMutableArray ,所以 construct 時,我用 alloc 分配 memory 給這個變數。
list.m
- - (id) init {
- self.data = [[NSMutableArray alloc] init];
- return self;
- }
Method add
list.m
- - (void) add:(NSString *)name {
- [self.data addObject:name];
- }
Method remove
這個 method 會比對要刪除的字串,當比對成功就刪除。
list.m
- - (void) remove:(NSString *)name {
- int i;
- int n = [self.data count];
- for (i = 0; i < n; i++) {
- if ([self.data objectAtIndex:i] == name) {
- NSLog(@"Remove index = %d",i);
- [self.data removeObjectAtIndex:i];
- return ;
- }
- }
- }
Method print
print :將 list 中的資料全部印出來。
list.m
- - (void) print {
- int i;
- int n = [self.data count];
- for (i = 0; i < n ; i++) {
- NSLog(@" name = %@", [self.data objectAtIndex:i]);
- }
- }
執行 list 的程式碼
上面幾個步驟就把 list 物件寫好了,接著我要在 main.m 中 new list 這個物件來使用。
我新增三項資料 r1, r2, r3,再將 r2 刪除,最後印出結果 r1 與 r3。
main.m
- list *t = [[list alloc] init];
- [t add:@"r1"];
- [t add:@"r2"];
- [t add:@"r3"];
- [t remove:@"r2"];
- [t print];
- //Output:
- // name = r1
- // name = r3
全部的程式碼
list.m
- #import "list.h"
- @implementation list
- - (id) init {
- self.data = [[NSMutableArray alloc] init];
- return self;
- }
- - (void) dealloc
- {
- }
- - (void) add:(NSString *)name {
- NSLog(@"add name = %@", name);
- [self.data addObject:name];
- }
- - (void) remove:(NSString *)name {
- int i;
- int n = [self.data count];
- for (i = 0; i < n; i++) {
- if ([self.data objectAtIndex:i] == name) {
- NSLog(@"Remove index = %d",i);
- [self.data removeObjectAtIndex:i];
- return ;
- }
- }
- }
- - (void) print {
- int i;
- int n = [self.data count];
- for (i = 0; i < n ; i++) {
- NSLog(@" name = %@", [self.data objectAtIndex:i]);
- }
- }
- @end
main.m
- #import "list.h"
- int main(int argc, char *argv[])
- {
- @autoreleasepool {
- list *t = [[list alloc] init];
- [t add:@"r1"];
- [t add:@"r2"];
- [t add:@"r3"];
- [t remove:@"r2"];
- [t print]; // r1 r3
- list *t2 = [[list alloc] init];
- [t2 add:@"r1"];
- [t2 add:@"r2"];
- [t2 add:@"r3"];
- [t2 remove:@"r1"];
- [t2 print]; // r2 r3
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
- }
- }