持续更新中,敬请期待...
学而不思则罔,思而不学则殆
学是一部分,记是另外一个部分。下面总结一下快速记忆要点,当然前提是你要理解上面的文章,以下只是总结的记忆要点,不是所有知识点,只是一些长期学习中需要我们牢记或者容易忘记的一些点。
一、Object-C 对象、消息和类的定义
1、消息 [消息接收者 消息]
2、.h文件是类定义,@interface @end类的声明开始与结束,.m文件是类实现。@implementation @end结束类实现的开始与结束
3、.h文件定义对外公开,@property只能是interface关键字以内使用。
4、静态变量,无论init多少个实例对象,静态变量有且只有一个。
二、Object-C 对象的类型和动态绑定
1、动态绑定:开始执行的时候,消息才确定消息接收者类型,因为消息的定义可能在子类或者父类。
2、多态:统一消息,作用于不同的消息接收者,可以有不同的执行结果,即不同消息接收者可以有相同的方法。
3、nil : alloc方法将数值初始0,对象和其它类型的指针会初始化为nil。为nil的对象发消息,写法有效,方法不会执行,有返回值时对象-nil、指针-NULL、数值类型-0。
4、id不是(NSobject *),id可以存任何对象。编译时不会类型检查,不能->调用
5、@private 私有,声明它的类可以访问,子类不能访问,@protected 受保护的,默认,声明它的类和子类可访问,@public 本类和其它类可以直接访问,@package 所在框架
6、instancetype 代表返回的是一个当前的类对象
三、Object-C ARC和弱引用
1、ARC只能管理OC的对象,不能管理通过malloc申请的内存。
2、对象命名是不能用方法族关键字,以免造成误释放
3、不要在dealloc中释放实例变量(但可以释放资源)
4、尽量保持对象之间程属性结构避免循环引用,请使用_week弱引用来避免循环引用
四、Object-C 属性声明和点语法
1、自己定义property数形变量是一定要遵循oc命名规则。
2、 点语法可以快节操错 obj.age *= 2,这句话等于[boj setAge:[obj age] * 2];
3、属性声明时指定选项,这里只记ARC怎么用。
setter = setValue: //setValue可以取别的名字
getter = value //value可以取别的名字
原子性操作
nonatomic // 非原子性操作、非线性安全
读写属性:
readonly // 只读
readwrite / / 读写
赋值时的选项:
assin // 单纯赋值
retain // 进行保持操作
unsafe_unratained // 同assin,用于ARC
strong // 同retarin,用于ARC
week // 弱引用,用于ARC
copy // 复制对象
选项名称 | 基础数据类型 | 对象类型 |
---|---|---|
未指定任何选项 | 直接赋值 | 警告 |
assign、unsafe_unratained | 直接赋值 | 直接赋值 |
retain、strong | 出错 | 赋值并对新值进行retain |
week | 出错 | 弱引用 |
copy | 出错 | 赋值时建立传入值的一份副本 |
五、Object-C 类NSObject
1、NSObject根类方法提供了运行时系统的基本功能
2、isKindOfClass,Class也是一个对象
3、description打印可以修改,默认打印。
六、Object-C类别Category和扩展Extension
1、类别就是@interface 类名 (类别名),其它定义和使用和普通的类相同,类别可以单独定义新文件Student+Dance.h,Student+Dance.m也可以直接写到类里边,写到类里边时可以分开写也可以都写到.m文件里。
2、类别的.h中包含属性声明的情况下,实现部分需要手动定义访问方法别的类才能访问。自己都可以访问
3、类别声明一个类里边的私有方法,不写实现可以访问到这个私有方法,java里叫反射。oc叫类的前置声明
4、类扩展和类别的差别就是@interface 类名 (),括号里没有文本。
七、Object-C 协议Protocol
1、协议:可以单独写在.h里,也可以跟类的.h写在一起。事实上是一组方法的列表,使用协议可以使不同的类共享相同的消息。java中的接口和协议十分类似。使用方法:类的头文件类名的后面跟上协议名 <Speciality,otherProtocolName>
2、默认关键字required,它是必须实现的方法,optional可以不用实现
3、协议类型声明用来检测传入的对象是否遵循这个协议,否则编译发出警告
4、非正式协议:类别用法中的另一个叫法。我们可以将一组方法声明为NSObject的类别,这成为非正式协议。 即凡是NSObject或其子类Foundation框架中的类增加的类别,都是非正式协议。
八、Object-C 块对象
1、全局变量静态变量可获取修改,局部变量不能修改
2、__block变量在块对象作用域之间共享,块对象存在时__block对象存在。不存在时__block对象也不存在。
作者:Yink_Liu
链接:https://www.jianshu.com/p/ac75ee32b4bd