• OC 类方法,对象方法,构造方法以及instancetype和id的异同


    OC 类方法,对象方法,构造方法以及instancetype和id的异同

    类方法:

    类方法是可以直接使用类的引用,不需要实例化就可以直接使用的方法。一般写一些工具方法。

    类方法:

    1. 声明和实现的时候,以(+)开头
    2. 类方法属于类的本身,只能通过类名调用
    3. 类方法不能直接访问成员变量
    4. 类方法不能直接调用对象方法(可以间接调用)

    间接调用:

    1. 把对象当做形参传入
    2. 在类方法中创建一个对象

    类方法的好处:

    调用类方法的时候,不用创建对象,更节省内存,调用比较简单,效率高。

    什么时候使用类方法?

    当不需要访问成员变量的时候

    对象方法:

    1. 声明和实现的时候,以(-)开头
    2. 对象方法隶属于对象,只能通过对象调用
    3. 对象方法可以直接访问成员变量
    4. 对象方法可以调用其他的对象方法以及类方法

    实例化对象两种方法(建议使用第二种):

    Person * p = [Person new];

    		//        new 类方法
            //        1.开辟存储空间
            //        2.初始化成员变量
            //        3.返回指针
            Person * p = [Person new];
    

    Person * p = [[Person alloc] init];

    		//在堆中开辟存储空间 +alloc
            Person * p1 = [Person alloc];
            //初始化成员变量 -init
            Person * p2 = [p1 init];
    

    构造方法:

    对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。

    - (instancetype)init
    {
        self = [super init];//先继承再说
        if (self) {
            
            _age = 10;
            _name  = "dahuan";
            
        }
        return self;
    }
    
    //用户自定义构造方法(对象方法)
    - (instancetype)initWithName:(char *)name age:(int)age{
        
        self = [super init];//先继承再说
        if (self) {
            
            _age = age;
            _name  = name;
        }
        return self;
    }
    
    
    //用户自定义构造方法(类方法)
    + (instancetype)personWithName:(char *)name age:(int)age {
        
        Person * p = [[Person alloc] initWithName:name age:age];
        return p;
    }
    

    instancetype和id的异同:

    1、相同点

    都可以作为方法的返回类型

    2、不同点

    1. instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;

    2. instancetype只能作为返回值,不能像id那样作为参数。

  • 相关阅读:
    在桌面建立快捷方式 Mr
    在窗口中显示一幅 JPG 图象 Mr
    【转载】COM组件设计与应用(一)——起源及复合文件 Mr
    【转载】COM组件设计与应用(二)——GUID和接口 Mr
    关于在Win7 SP1操作系统下编译的ADO应用程序不能在比Win7 SP1版本低的操作系统上运行,微软给出的解释和解决方案 Mr
    Vue UI图形化项目管理使用
    vue+eldialog提交校验
    获取当前日期前一个月日期与天数数组
    element输入框只能输入数字或小数保留两位小数
    vue+ DatePicker日期的加减
  • 原文地址:https://www.cnblogs.com/xubaoaichiyu/p/5478478.html
Copyright © 2020-2023  润新知