zoukankan      html  css  js  c++  java
  • Objective-C 构造方法 分类 类的深入研究

    构造方法

    1.对象创建的原理

    new的拆分两部曲

    Person *p = [Person alloc]; 分配内存(+alloc)

    Person *p = [p init]; 初始化(-init)

    合并: Person *p = [[Person alloc] init]; 

    2.init方法的重写

    - (void) init {
        if(self = [super init]) {
            _age = 10;//想在对象创建完毕后 成员变量马上就有一些默认的值
        }
        return self;
    }

    3.自定义构造方法

    /** 自定义构造方法一 **/
    - (id) initWithAge : (int) age {
        if(self = [super init]) {
            _age = age;
        }
        return self;
    }
    
    /** 自定义构造方法二 **/
    - (id) initWithAge : (int) age andNo : (int) no {
        if(self = [super init]) {
            _age = age;
            _no = no;
        }
        return self
    }
    
    /** 注意 **/
    //返回值是id类型
    //方法名都以init开头

    分类

    Category

    可以给一个类扩充一些方法(不修改原来的代码)

    #import "Person.h"
    
    @interface Person (Hy)
    - (void) show;
    @end
    
    /** 声明 **/
    //@interface 类名 (分类名称)
    //@end
    #import "Person+Hy.h"
    
    @implementation Person (Hy)
    - (void) show {
        NSLog(@"哈哈哈~~!");
    }
    @end
    
    /** 实现 **/
    //@implementation 类名 (分类名称)
    //@end

    使用注意:

    分类只能增加方法 不能增加成员变量

    分类方法实现中可以访问原来类中声明的成员变量

    分类可以重新实现原来类中的方法 但是会覆盖掉原来的方法 会导致原来的方法没法再使用

    方法调用的优先级: 分类(最后参与编译的分类优先) ---> 原来类 ---> 父类

    类的深入研究

    类本身也是一个对象 是Class类型的对象 简称类对象

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

    Class c = [p class];

    [c test];//c是可以调用 Person里面的类方法

    类的加载和初始化:

    当程序启动时 就会加载项目中所有的类和分类 而且加载后会调用每个类和分类的+load方法 只会调用一次

    当第一次使用某个类时 就会调用当前类的+initialize方法

    先加载父类再加载子类(先调用父类的+load方法 再调用子类的+load方法) 先初始化父类再初始化子类(先调用父类的+initialize方法再调用子类的+initialize方法)

  • 相关阅读:
    实战:推断mysql中当前用户的连接数-分组筛选
    Codeforces Round #250 (Div. 2) A
    设计模式(3)-对象创建型模式-Abstract Factory模式
    设计模式
    uva 11825 Hackers' Crackdown (状压dp,子集枚举)
    java中不常见的keyword:strictfp,transient
    C++中数组初始化
    Hadoop 开源调度系统zeus(二)
    Python发一个GET请求
    【代码优化】equals深入理解
  • 原文地址:https://www.cnblogs.com/huangyi-427/p/4600579.html
Copyright © 2011-2022 走看看