8.对象初始化

1.分配对象

   分配(allcoation)是一个新对象诞生的过程。向某个类发送alloc消息,就能为类分配一块足够大的内存,以存放该类的全部实例变量。同时alloc方法还顺便将这块内存区域全部初始化为0。Objective-C将分配和初始化拆分为两个明确的步骤:来自NSObject的类方法alloc为对象分配一块内存区域并将其清零,实例方法init用于获得的一个对象并使其运行。

   1.1编写初始化函数

      if(self = [super init])

      [super init]作用是让超类完成其自身的初始化工作。对于继承类NSObject的类来说,调用超类的init方法可以让NSObject执行它所需的所有操作,以便对象能够响应消息并处理保留计数器。而对于从其他类继承的类,通过这种方法可以实现自身的全新初始化。

   1.2便利初始化函数

     有些对象拥有多个以init开头的方法名。需要记住,这些init方法实际上没什么特别的,只是遵循命名约定的普通方法。

     许多类包含便利初始化函数(convenience initializer),它们是用来完成某些额外工作的初始化方法,可以减轻负担。

       - (id) init;

       这一基本方法初始化一个新的空字符串。对于不可变的NSString类来说,这个方法没有多大的用处。不过,可以分配和初始化一个新的NSMtutableString类的对象并开始向该类中添加字符。可以像下面这样使用此对象:

       NSString *emptyString = [[NSString alloc] init];

        上面的代码返回一个空字符串。

      - (id) initWithFormat:(NSString *) format,...;

        正如我们使用NSLog()函数和类方法stringWithFormat:接收格式化的字符串并输出格式化的结果一样,这个版本的代码初始化了一个新的字符串作为格式化的结果。使用此初始化方法的例子如下:

     string = [[NSString alloc] initWithFormat:@"%d or %d",25,625];

     上面的代码返回一个字符串,其值为“25”或“624”。

     - (id) initWithContentsOfFile:(NSString *) path encoding:(NSStringEncoding) enc error:(NSError **) error

      这个initWithContentsOfFile:encoding:error:方法用来打开指定路径上的文本文件,读取文件内容,并使用文件内容初始化一个字符串。读取文件/tmp/words.txt的代码如下:

      NSError *error = nil;

      NSString *string = [[NSString alloc] initWithContentsOfFile:@"/tmp/words.txt"

                                                              encoding:NSUTF8StringeEncoding

                                                                     error:&error];

       encoding参数将文件内容的类型告诉了API。一般来说,应该使用NSUTF8StringEncoding,它表示文件内容是UTF8格式进行编码的。

        第三个参数会在初始化没有发生错误时返回nil。如果出现了错误,可以使用localizedDescription方法来查明情况。代码放进去如下所示:

         NSError *error = nil;

         NSStringEncoding encoding = NSUT8StringEncoding;

         NSString *string = [[NSString alloc ]initWithCotentsOfFile:@"/tmp/words.txt"

                                             usedEncoding:&encoding

                                                        error:&error];

         if(nil ! = error)

{

NSLog(@"Unable to read data from fiel,%@",[error localizedDescription]);

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值