这是我参与「第四届青训营 」笔记创作活动的的第3天
OC自学笔记1 | 青训营笔记
类:OC中,本质是一个自定义的数据类型
- 三要素:
- 名字:抽象
- 特征:属性
- 行为:方法
- 声明
- @interface 类名: NSObject{成员变量/字段/属性(共同特征)}
- 方法声明
- @end
- 实现
- @implementation 类名
- 方法的实现
- @end
- 创建
- 类名 *对象名 = [类名 new];
- Person *p = [Person new];
- 赋值
- p->name = @"jack";
- 需要在声明时写@public,所有属性均可访问
- (*p).nane = @"jack";
- p->name = @"jack";
- 对象/实例方法
- 声明:- (返回类型)方法名称:(参数类型)形参名称1 :(参数类型)形参名称2;
- 函数名称为:"方法名称::"
- - (void)run;
- - (void)eat:(NSString*)name;
- 实现
- - (void)run{}
- - (void)eat:(NSString*)name{}
- 调用
- [p1 run];
- [p1 eat:@"排骨"];
- [p1 sum:num1 :num2];
- 在方法内调用其他方法[self 方法名]
- self代表当前对象
- 方法可以访问对应对象的属性
- 声明:- (返回类型)方法名称:(参数类型)形参名称1 :(参数类型)形参名称2;
- 类方法
- 声明:+ (返回类型)方法名称:(参数类型)形参名称1 :(参数类型)形参名称2;
- 调用:
- [类名 类方法];
- [Person 类方法];
- 规范
- 提供和类同名的类方法(小写),方法创建对象返回类的对象
- 类似构造方法
- new也是类方法,实际进行4步操作
- 申请空间
- Isa指针指向代码段,类的代码
- 初始化
- 返回对象地址
- 提供和类同名的类方法(小写),方法创建对象返回类的对象
- 规范
- 属性名以_开头
- 方法名
- 一个参数xWithX
- 多个参数xWithX:(类型)形式参数1 and:(类型)形参名称2
- [p1 sumWith:10 and:20]
- 存储
- 类加载:当类第一次被访问时,会将类存储到代码段
- 访问类
- 创建对象
- 声明类的指针变量
- 访问类
- 对象的存储
- 声明Person* p
- 类指针变量p:在栈存储地址
- [Person new]
- 在堆内存申请空间,创建对象(根据类的模板)
- 属性是对象,储存的是指向对象的指针,而不是生成一个对象,默认为nil
- 对象中还有另外一个属性:isa,是个指针,指向代码段中类代码的地址
- 初始化
- 基本数据类型:赋值为0
- C语法的指针类型:赋值为NULL
- OC的类指针类型:赋值为nil
- 返回对象的地址
- 在堆内存申请空间,创建对象(根据类的模板)
- 方法:通过isa指针,到代码段中找,多个对象共用同一个
- 声明Person* p
- 类加载:当类第一次被访问时,会将类存储到代码段
- 多文件开发
- Cocoa class自动创建.m和.h
- 多个target
- 一个target中的类,无法直接在另一个target中访问
类与结构体
- 封装:结构体只能封装数据,类可以封装方法
- 存储:局部变量结构体在栈,对象在堆空间
- 栈空间相对小,访问效率相对高
- 堆空间相对大,访问效率相对低