OC中的对象初始化方法

        在OC中有关对象初始化的方法很多,下面有几点:

创建新对象的两种不同的方法是:[类名 new]和[[类名 alloc] init],

并且这两种方法是等价的。

主要分为两步:

1、分配(allocation)

        在创建新对象的过程中需要分配内存,向某个类发送alloc消息的结果,就是为该类分配一块足够大的内存,以存放该类的实例变量,同时,alloc方法还顺便将这块内存区域全部初始化为0.


例如,BOOL类型变量被初始化为NO,int类型变量被初始化为0,指针被初始化为nil。

一个刚刚分配的对象并不能立即使用,需要先初始化该对象,然后才能使用它。


2、初始化(initialization)

     初始化从操作系统取得一块内存,准备用于存储对象。

     init方法几乎总是返回它们正在初始化的对象。

    因为初始化方法返回的对象可能与分配的对象不同,

    所以嵌套调用alloc和init方法应该如下

    Car *car=[[Car alloc] init];

    而不是如:Car *car = [Car alloc];[car init];

    下面就以Car为父类,Tire和Engine为子类进行分析

    -(id)init

    {

       if(self = [super  init])

      {

          engine = [Engine  init];

          tire[0] = [Tire  new];

          tire[1] = [Tire  new];

          tire[2] = [Tire  new];

          tire[3] = [Tire  new];

       }

      return self;

   }

    上述代码中,if(self = [super  init])表明self对象可能发生改变,

    [super  init]的作用是使超类完成它们自己的初始化工作,如果返回的对象发生改变,       则self需要更改。

    最后,init方法返回已经被初始化的对象。

3、便利初始化函数

    最常见的有

    -(id)init;

    这一基本方法在NSString类中初始化一个新的空字符串。

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

    在NSMutableString中返回一个空字符串。

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

    初始化一个新的字符串作为格式化操作的结果,

    例如:string=[[NSString alloc] initWithFormat: @"%d or %d",10,23];

     -(id)initWithContentsofFile: (NSString *)path;

     initWithContentsofFile:方法打开指定路径上的文本文件,

    读取文件内容,并使用文件内容初始化一个字符串。

4、指定初始化函数

在Tire类中增加两个便利初始化函数:

@interface Tire: NSObject

{

    float  pressure;

    float  treadDepth;

}

-(id) initWithPressure: (float)pressure;

-(id) initWithTreadDepth:(float)treadDepth;


-(id) initWithPressure:(float)pressure

         treadDepth:(float)treadDepth;


-(void)setPressure:(float)pressure;

-(float)pressure;


-(void)setTreadDepth:(float)treadDepth;

-(float)treadDepth;

@end

       上述两个新的初始化函数initWithPressure:和initWithTreadDepth:,

       它们需要具有特定的轮胎压力或花纹深度的tire对象而不关心其他属性值,并且乐意接受默认值。

       把父类的实例变量初始化的方法称为指定初始化方法。

       通常,接受参数最多的初始化方法最终成为指定初始化函数。

       不需要为自己的类创建初始化函数方法,如果构造了一个初始化函数,则一定要在自己的指定初始化函数中调用父类的指定初始化函数。

        如果初始化函数不止一个,则要选择一个作为指定初始化函数,被选定的方法应该调用父类的指定初始化函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值