美文网首页
深入浅出Objective-C笔记(四)

深入浅出Objective-C笔记(四)

作者: 无聊的呆子 | 来源:发表于2015-11-18 22:26 被阅读34次

    对象的初始化


    • 对象刚生成的初始值的多少?

      People *p = [ [People alloc] init ];
      
    • init方法的实现

      - (id) init { 
          self = [super init];
          if (self) {
              weight = 70.0;
              height = 1.8;
          }
          return self;
      }
      
      「id」是可以指向任何类型的指针类型。
      
       后续会用「instancetype」代替「id」
      
      「self」是每个对象预先内置在里面的变量。它表示的是对这个对象自身的引用。
      
      「super」引用的是这个对象的父类对象。
      
      先调用「super」对象的「init」方法,会完成一些必须的系统方面的初始化工作,
      并返回初始化后的对象引用。
      
      然后把初步初始化的对象返回给变量「self」
      
      self = [super init];是一个习惯写法,不必纠结细节。
      
      如果初始化失败,「super」的「init」方法会返回一个空指针(nill)。
      
      我们要在if条件里判断初步初始化的返回值是不是空「if(self)」,
      如果是空就不要继续进行自己的初始化工作。
      直接把空指针返回去就好了。
      
      如果成功了,就进入if语句块进行初始化,把体重初始化为70.0
      身高初始化为1.8
      
      但是有个问题,不可能每个人都是这种身高体重,所以我们希望每次创建people对象时,
      能根据具体情况给初值,这样才合理。
      
    • 增加一个带参数的初始化方法

      People *p = [ [People alloc] init ];是不带参数的初始化。
      init方法是继承来的,基本每个对象都有。
      但是,看了init方法的实现,发现有个问题,不带参数,固定了初始化值,
      这是不合理的,因为不可能每个对象的初始值都一样呀。
      

    解决方案

     @interface People : NSObject
      {
          double height;
          double weight;
      }
      - (void) initWithHeight : (double)h andWeight : (double)w;//新加的初始化方法
      - (void) growUpByHeight : (double)h andWeight : (double)w;
      @end 
    

    初始化方法的实现

    - (id) initWithHeight : (double)h andWeight : (double)w {
        self = [super init];
        if (self) {
            weight = w;
            height = h;
        }
        return self;
      }
    
      所有类的初始化方法的实现在ObjC里框架基本一致。
    
    小结

    自己在类里写带参数的初始化方法

    相关文章

      网友评论

          本文标题:深入浅出Objective-C笔记(四)

          本文链接:https://www.haomeiwen.com/subject/ypllhttx.html