zoukankan      html  css  js  c++  java
  • 类的本质

     
    类本身也是一个对象,是个Class类型的对象,简称类对象
    Person *p = [[Person alloc] init];
    Person *p1 = [[Person alloc] init];
    //获取内存中的类对象
    Class c = [p class];
    Class c1 = [p1 class];
    c==c1
     
    //获取内存中的类对象
    Class c2 = [Person class];
    c==c1==c2
    Person * p = [c2 new]
    //默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址 >
    //1,会调用对象p的-description方法
    //2,拿到-description方法的返回值(NSString *)显示到屏幕上
    //3,-description方法默认返回的是“类名+内存地址”
    NSLog(@"%@",p);
    想输出对象的详细信息,只有在该对象实现中重写-description方法(java中是toString方法)
    -(NSString *)description//决定实例对象的输出结果
    {
       return [NSString stringWithFormat:@"age=%d,name=%@",_age,_name];
    }
    +(NSString *)description//决定类对象的输出结果,如果不重写,默认输出时该类对象的类名
    {
       return @“abc”;
    }
     
    //当程序启动的时候,就会加载一次项目中所有的类,类加载完毕后就会调用+load方法(先调用类的load方法,最后才调用分类的load方法)
    +(void)load
    {
    }
    //当第一次使用这个类的时候,就会调用一次+initialize方法
    +(void) initialize
    {
     
    }
    分类中也可以由load和initialize方法,load方法加载完毕后被调用,如果类和分类中都有initialize方法,
    那么第一次使用这个类的时候就会调用分类中的initialize方法,分类中没有才会调用类中的+initialize
     
    1,当程序启动时,就会加载项目中所有的类和分类,而且记载后会调用没各类和分类的+load方法。只会调用一次
    2,当第一次使用某个类时,就会调用当前类的+initialize方法()
    3,先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
    先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize)
     
     
  • 相关阅读:
    es6常见特性
    js实现查找字符串出现最多的字符和次数
    jQuery 插件封装的方法
    js变量作用域--变量提升
    js 三元表达式的写法
    bug
    基于bootstrap的模态框的comfirm弹窗
    基于bootstrap模态框的alert弹窗
    回车键搜索代码 兼容性
    盒子垂直居中方式
  • 原文地址:https://www.cnblogs.com/shuizhuqing/p/4455349.html
Copyright © 2011-2022 走看看