Chapter 5 : 对象(object/instance)初始化

1. 示例代码:

 1 // Tire.h文件
 2 #import <Cocoa/Cocoa.h>
 3 
 4 @interface Tire : NSObject
 5 {
 6     float pressure;
 7     float treadDepth;
 8 }
 9 
10 - (id)initWithPressure:(float)pressure;
11 - (id)initWithTreadDepth:(float)treadDepth;
12 // 指定初始化函数
13 - (id)initWithPressure:(float)pressure treadDepth:(float)treadDepth;
14 
15 - (void)setPressure:(float)pressure;
16 - (float)pressure;
17 
18 - (void)setTreadDepth:(float)treadDepth;
19 - (float)treadDepth;
20 
21 @end
 1 // Tire.m文件
 2 
 3 #import "Tire.h"
 4 
 5 @implementation Tire
 6 
 7 - (id)init
 8 {
 9     if (self = [self initWithPressure:34 treadDepth:20])
10     {
11         // Do some thing
12     }
13 
14     return self;
15 }
16 
17 - (id)initWithPressure:(float)p
18 {
19     if (self = [self initWithPressure:p treadDepth:20])
20     {
21     }
22 
23     return self;
24 }
25 
26 - (id)initWithTreadDepth:(float)td
27 {
28     if (self = [self initWithPressure:34.0 treadDepth:td])
29     {
30     }
31     
32     return self;
33 }
34 
35 - (id)initWithPressure:(float)p treadDepth:(float)td
36 {
37     if (self = [super init])
38     {
39         pressure = p;
40         treadDepth = td;
41     }
42     
43     return self;
44 }
45 
46 - (void)setPressure:(float)p
47 {
48     pressure = p;
49 }
50 
51 - (flaot)pressure
52 {
53     return pressure;
54 }
55 
56 - (void)setTreadDepth:(float)td
57 {
58     treadDepth = td;
59 }
60 
61 - (float)treadDepth
62 {
63     return treadDepth;
64 }
65 
66 - (NSString *)description
67 {
68     NSString *desc = [NSString stringWithFormat:@"Tire: Pressure: %.1f TreadDepth:%.1f", pressure, treadDepth];
69 
70     return desc;
71 }
72 
73 @end

2. 对象初始化:看完上面的示例代码后会发现,对象初始化方法的通常写法如下:

1 - (id)init
2 {
3     if (self = [super init])
4     {
5         ...
6     }
7 
8     return self;
9 }

PS : 在自定义的初始化方法中,需要调用自定指定的初始化函数或者超类指定的初始化函数。

        一定要将超类的初始化函数的值赋给self对象,并返回你自己的初始化方法方法的值。

        超类的初始化可能决定返回一个完全不同的对象。

3. 关于初始化方法的命名一般由init开头, 比如:

 1 // NSString类中的一些初始化方法:
 2 
 3 // 返加一个空的字符串
 4 NSString *emptyString = [[NSString alloc] init];
 5 
 6 // 返回一个字符串值
 7 NSString *string = [[NSString alloc] initWithFormat:@"%d or %d", 25, 624];
 8 
 9 // 返回指定路径上的文件中的内容
10 NSString *string = [[NSString alloc] initWithContentOfFile:@"/tmp/words.txt"];

4. 初始化方法规则:

-> 若不需要为自己的类创建初始化方法,则可使用默认的方法,即:[[instance alloc] init];

-> 若要构造一个初始化方法,则一定要在自己的初始化方法中调用超类指定的初始化方法。

-> 若初始化方法不止一个,则需要选定一个指定的初始化方法,被选定的方法应该调用超类指定的初始化方法。

posted on 2012-09-27 10:56  BankFish  阅读(229)  评论(0编辑  收藏  举报