0x01 便利初始化函数
有些对象拥有多个以init开头的方法名,这些方法和普通的方法一样,只是遵循命名规则约定,用init开头表示它用于初始化。
很多类中包含便利初始化函数(Convenience Initializer),它们是用来完成某些额外工作的初始化方法。
下面我们用NSString类中的一些初始化方法来举例。
1、基本的初始化方法,返回一个空字符串:
- (id) init;
//-----------------------------------------------------------------------
NSString *emptyString = [[NSString alloc] init];
//最基本的init对不可变的NSString类来说就仅仅是初始化一个空字符串
NSMutableString *emptyMutableString = [[NSString alloc] init];
//但初始化一个NSMutableString类的对象就可以开始向其中添加字符
2、带格式化操作的初始化方法,直接返回带格式的字符串,效果类似stringWithFormat:
- (id) initWithFormat: (NSString *) format, ...;
//-----------------------------------------------------------------------
string = [[NSString alloc] initWithFormat: @"%d or %d", 25, 624];
//This gives you a string with the value of "25 or 624".
这里可以看出Apple建议把alloc和init分开的原因,分配和初始化的功能是不一样的,把初始化步骤独立开来可以为程序带来更多灵活性。
作为Cocoa的编程人员应该熟练地使用alloc+init,而new只是辅助方法。
3、使用文件中的内容来初始化字符串:
- (id) initWithContentsOfFile:(NSString *) path
encoding:(NSStringEncoding) enc
error:(NSError **) error
//-----------------------------------------------------------------------
NSError *error = nil;
NSStringEncoding encoding = NSUTF8StringEncoding;
NSString *string = [[NSString alloc] initWithContentsOfFile:@"/tmp/words.txt"
usedEncoding:&encoding
error:&error];
if(nil !=