对象自动释放池的使用
释放池的作用
autorelease对象方法
@autoreleasepool关键字的使用
Person *p = [Person new];
@autoreleasepool{
[p autorelease];
}
自动释放池的嵌套(栈方式来存储):自动释放池栈,存储多个自动释放池,对象每次加入到栈顶的自动释放池中
封装一个initWithXxx方法, 在其中使用"对象自动释放池" * 释放池的作用
//快速创建类的类方法定义
+(instancetype)person{return [[[ self alloc] init] autorelease]; } Person *p = [Person person];ARC介绍
ARC概念介绍
ARC的判断原则/强弱指针介绍
循环strong问题
MRC代码转ARC代码
ARC项目如何兼容MRC的代码项目---> 编译选项 ---->双击类文件----> -fno-objc-arc
MRC项目转换为ARC
- Category分类
分类的作用:
将一个类中的不同方法分到多个不同的文件中存储, 便于对类进行模块化设计、团队合作开发。
可以在不修改原来类的基础上, 为这个类扩充一些方法.
分类中只能增加"方法", 不能增加成员变量等。
//原类声明
@interface
Person:NSObject { int _age; }@end//原类实现@implementation Person { int_weight; //私有的成员变量 } -(void)setAge:(int)age{ } -(int)age{ }@end
//分类
@interface
Person (base)@property int age; //相当于给_age进行get和set方法的声明 @end
分类可以访问原来类中的成员变量
主类与分类中方法的调用优先级问题:
当分类与主类中都有同一个方法的时候, 优先调用分类中的方法。
当多个分类中都有同样的一个方法的时候, 优先调用最后一个参与编译的分类中的方法。
非正式协议
方式: 通过分来来实现非正式协议原理: 就是给NSObject类添加分类来给其他类添加方法
应用: NSString + countNumForString
类扩展(匿名分类)
类扩展是写在.m文件中的, 为当前类扩展一些私有的成员. 1> 作用: 为某个类扩充一些私有的成员变量和方法. 延展也是为类定义私有方法的一种方式
"类扩展"对比"分类", 就少了一个分类名称, 因此也有人称它为"匿名分类".
- block
block是一种数据类型, 可以使用这种数据类型定义变量, 并赋值。
block数据类型在使用前需要先定义该数据类型, 然后再使用(就像使用Person类一样, 先定义一个Person类, 然后再通过Person类声明一个Person类型变量)。 * block这种数据类型用来保存一个方法、函数、一段代码
必须掌握: block的定义语法、使用场景
无参无返回值
void
(^变量名)(); 变量名 = ^(){ }; 或者变量名=^{ };
有参无返回值
有参有返回值
返回值类型 (^变量名) (参数列表);
变量名 = ^(){}
使用inlineBlock辅助编写block代码
int
(^block)(int,int) = ^(int n, int m){};