Objective-C 我来了 第一集 内存管理

    写这个系列的文章顺序不是很重要,但是如果你想系统的学习Objective-C这门语言的话,还是要好好从最简单的常量变量数据类型开始学起。
    之前还是学了一些关于Java的知识,所以依稀记得Java里面有一个垃圾回收机制,在学习Objective-C发现也存在类似的机制,即使在Xcode4.2以后Apple添加了ARC技术,但是还是需要了解什么是内存管理.
    Objective-C是依赖一个叫引用计数器的一个整数(retainCount)来操作的:

1、当新创建一个对象的时候,引用计数会加1
2、当调用alloc、copy、retain,引用计数会加1
3、当调用release ,引用计数会减1
当引用计数等于0的时候,会自动调用dealloc销毁对象

野指针:
先来看一下代码:


BEABBEF3-385F-4249-83B3-6E5161538D73.png

当我把lisi这个对象先relase,再去设置年龄的时候就会出现问题。错误:Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)
错误。因为你访问了一块已经不属于你的内存。

原因:lisi一开始指向内存YDXPerson的地址,release之后这个YDXPerson对象销毁了,地址就不在了,但是lisi这个指针对象还是指向了内存里一块"垃圾内存"。就产生了野指针。

内存释放原则:谁创建 谁释放。

自动内存释放:

1、autorelease方法不会改变对象的引用计数器,只是将这个对象放到自动释放池中;
2、自动释放池实质是当自动释放池销毁后调用对象的release方法,不一定就能销毁对象(例如如果一个对象的引用计数器>1则此时就无法销毁);
3、由于自动释放池最后统一销毁对象,因此如果一个操作比较占用内存(对象比较多或者对象占用资源比较多),最好不要放到自动释放池或者考虑放到多个自动释放池;
4、ObjC中类库中的静态方法一般都不需要手动释放,内部已经调用了autorelease方法;

你可能感兴趣的:(Objective-C 我来了 第一集 内存管理)