初识Objecive-C 之 内存管理

来源:互联网 发布:医院ap网络 编辑:程序博客网 时间:2024/06/05 02:14

1.   为什么要管理内存?

IOS为每一个程序分配了30M的内存,程序使用超过了20M就会收到警告,超过了30M就会crash程序(闪退)。内存管理就像图书馆,如果大家都去借书,但是没有人归还,那么图书馆很快就没有书可借了。

2.   程序存储的区域

代码区---存储代码

全局区---存储方法为的常量,如int a = 10 ;还存储这Static修饰的静态值

栈区---存储局部变量 如for循环里面的i值,栈根据的是后进先出的原则

堆区---C语言中的malloc(free)开辟出来的,OC中得alloc(释放dealloc)等

3.   内存管理的原则

谁创建谁释放,谁retain谁释放

4.   @autoreleasepool{};创建一个自动释放池。如果程序中产生大量临时对象,以及并发线程时,需要建立自己的自动释放池块。

5.   ARC:它可以在编译期由系统完成引用计数的管理,避免手工引用计数器带来的错误。

6.  注意:

  EXC_BAD_ACCESS错误指的是访问了已经被释放的内存也称之为野指针错误。

  nil空指针release是不会报错的也称之为空指针,它不并向java会有个空指针异常。