内存管理:在计算机中的内存使用是需向系统申请的,使用完之后释放,而这个过程是需要一套管理规则,统称内存管理;OC中的内存管理是通过引用计数
技术实现
常见的内存申请一般是通过 malloc
函数实现
malloc介绍:
函数声明:
void *malloc(int size);
说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针
内存的释放都是通过free
函数实现
free介绍:
函数声明:
void free(void *block);
即: void free(指针变量);之所以把形参中的指针声明为 void* ,是因为free必须可以释放任意类型的指针,而任意类型的指针都可以转换为void *。
OC对象内存管理之MRC
内存管理之copy
__block内存管理
block的循环引用
内存管理之Tagged Pointer
内存管理之引用计数存储
内存管理之weak指针
内存管理之自动释放池与RunLoop
内存管理之定时器
内存管理修饰符:strong、copy、weak、assign
strong: 强引用,指向的对象引用计数加一
copy: 拷贝根据不同情况有深拷贝和浅拷贝之分
weak用于修饰OC对象
assign用于修饰基本数据类型
assign不能用来修饰对象原因是什么?
- 如果对象引用计数大于0,assign修饰的指针不会在对象是方法时指针空赋值操作
- assign来声明的一个属性在初始化完赋值实际上是将保留对象分配给不安全的属性;对象在赋值后将被释放
- 说白了程序会直接crash
@weakify、@strongify: 剖析
网友评论