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方法;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...
    Code_Ninja阅读 1,583评论 1 3
  • 内存管理是程序在运行时分配内存、使用内存,并在程序完成时释放内存的过程。在Objective-C中,也被看作是在众...
    蹲瓜阅读 3,236评论 1 8
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 2,034评论 1 16
  • 前言 之前的两篇拙文C语言-内存管理基础、C语言-内存管理深入 介绍了关于C语言在内存管理方面的相关知识。但是对于...
    老板娘来盘一血阅读 3,781评论 25 36
  • iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与...
    蚊香酱阅读 5,782评论 8 119