zoukankan      html  css  js  c++  java
  • iOS 快速创建对象的类方法里的self

    快速创建对象的类方法的进化历程:

    原始版本:

    + (Book *)book {

        return [ [ [Book alloc ] init ] autorelease ];

    }
    进化一版本:

    + (id)book {

        return [ [ [self alloc ] init ] autorelease ];

    }
    进化二版本:

    + (instancetype)book {

        return [ [ [self alloc ] init ] autorelease ];

    }
     
    进化一版本比原始版本优的地方,就在于子类调父类的方法时,返回的是子类自身,而不是父类
    原始版本的情况下:
      有Dic.h这个类,继承自Book类,并且这个类有-(void)findWord;的方法
      Dic *xinhuaDic = [Dic book];  // 执行这个方法时,会先在Dic类里找book方法,没找到才去父类里找
      [xinhuaDic findWord]; // 执行到这行程序就崩溃了,报"经典错误"
    所以用 self和id固定类型 好. self的特点就是,谁调用这个方法,self就代表谁
     
    进化二版本比进化一版本优的地方见另一篇随笔<instancetype和id的区别>
  • 相关阅读:
    supervisor管理airflow
    airflow迁移
    flume部署
    canal原理&部署
    EMR日常操作
    linux的route
    autossh
    Velocity(5)——#macro 指令
    Git(1)----Eclipse安装Git插件
    Velocity(4)——引入指令和#Parse 指令
  • 原文地址:https://www.cnblogs.com/oumygade/p/4271304.html
Copyright © 2011-2022 走看看