今天是复习的第二天,感觉复习比看视屏、敲代码累得多的多。首先说说我怎么复习的把,由于看基础视屏的时候没有总结,所以现在复习很悲剧,终于尝到恶果了,所以我又把视频大概的看了一遍,没印象的、不懂的就没跳着看了,然后把所有的知识点写下,不懂、记得不全的百度补充。毕竟没开发经验,所以第二次看视频,还是收获很多的。
构造方法:用来初始化对象的方法,是个对象方法(或者说实例方法),以 - 开头 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值
重写构造方法的注意点: 1. 先调用父类的构造方法 [super init] 2. 再进行子类内部成员变量的初始化
main.h #import<Foundation/Foundation.h> #import "Person.h" #import "Student.h"
int main() {
// Person *p = [Person new]; // 完整的创建一个可用的对象 // 1. 分配存储空间 +alloc // 2. 初始化 -init // // 1.调用+alloc分配存储空间 // Person *p1 = [Person alloc]; // 2.调用-init进行初始化 // Person *p2 = [p1 init];
Student *stu = [[Student alloc]init];
NSLog(@"%d---%d",stu.age,stu.no);
return 0; }
Person.m #import "Person.h" #import "Student.h" @implementation Person - (id)init { // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性 // 当前对象self,[super init]返回的不一定是self,重新赋值,严谨些 // self = [super init];放在一起了
// 2.如果对象初始化成功,才有必要进行接下来的初始化 if (self = [super init]) { _age = 10; }
// 3.返回一个已经初始化完毕的对象 return self; } @end
Student.m #import "Student.h"
@implementation Student
// 学生对象初始化完毕后,年龄就是10,学号就是1 - (id)init { if (self = [super init]) { // _age = 10;写了也白写,没权利赋值 _no = 1;
} return self; }
@end
自定义构造方法的规范 1. 一定是对象方法,一定以 - 开头 2. 返回值一般是id类型 3. 方法名一般以initWith开头 例如: @implementation Person
- (id)initWithAge:(int)age {
if (self = [super init]) { _age = age; }
return self; } @end
在main.m文件中: Person *p = [[Person alloc]initWithAge:20];
遵循的原则:父类的属性交给父类方法去处理,子类方法处理子类自己的属性 当父类中的成员变量名字修改了的时候,子类可以不做任何修改。
类方法:[Person personWithAge:20];然后在类方法里return[[Person alloc]initWithAge:20],类方法里调用对象方法,也就是这里的自定义的构造方法。
|