在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
构造方法 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方法) |
请发表评论