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]));
- }
- }
目前回應 Comments(1 comments)
Larry 2014/06/12
Hi,
ReplyThanks for sharing.
In the main.m, line 17, the comment should be // r2 r3 instead of // r1 r2.
Admin
I had already fix this issue.