OC 内存管理

1.栈、堆

1.栈内存是由系统管理的

2.栈是用来存放局部变量

3.当代码执行到定义哪一行为这个局部变量分配存储空间

4.当程序执行到定义变量的代码块结束的时候,就会回收这个变量

堆:

1,堆内存是由程序员管理(动态存储区)

2. OC中的对象时在堆内存中

2.引用计数器:

OC中每一个对象,都有4个字节存储空间,用来存放引用计数的值

作用:

引用计数器的值,就是当前有多少个人在使用对象

当引用计数器为0时候,系统会立即回收这个对象

在OC中判断一个对象是否被回收的唯一依据:就是看这个对象的引用计数器是否为0

如何操作引用计数器:

1.当新创建一个对象的时候,他引用计数器为1(new,alloc,copy,multableCopy)

2.当给一个对象发送retain消息,它的引用计数器+1

3.当给一个对象发送release消息,它的引用计算器-1

当一个对象的引用计数器为0时候,系统就会调用dealloc

作用:1.验证对象是否被回收了

2.释放对象自己的资源

当一个对象的引用计数器为0的时候,这个对象就是僵尸对象

3.野指针:

当一个对象指针指向一个僵尸对象的时候,那么这个指针就是野指针

当定义一个指针,而这个指针没有进行初始化

操作野指针是非常危险的:1.程序崩溃了 2.数据错误

4.内存管理是来管理“OC对象”的内存的

内存管理不当造成两个问题:

一个对象不再使用了,但是依然占据内存,内存泄露

一个对象正在被使用,但却已经释放了,野指针。

5.空指针:

nil:OC实例对象的指针指向nil时,这个指针就是一个空指针

1.给空指针发送消息不会报错 2、它不会去调用方法

当一个指针已经被release了那么还要对该指针做一个清空的操作(person = nil)

防止后面使用到该指针的时候导致程序崩溃

6.nil ,Nil ,NULL,NSNull的区别

nil  :OC对象的空指针

Nil  :OC类对象的空指针

NULL :C语言的空指针

NSNull:是一个单例对象,用来在OC的集合中占的位置

7.内存管理的原则:

1、当有人使用这个对象就不要释放这个对象

2、当没有人使用这个对象就释放该对象

8.OC手动内存管理的黄金法则:

凡是调用alloc,new,copy,multableCopy创建一个新对象或调用retain

让对象的引用计数+1,都必须相应的调用一次release或者autorelease

9.@property参数

管理内存

retain 生产内存管理的代码

assign 没有内存管理的代码(默认)

当使用OC对象时候,就用retain

当使用非OC对象(基本数据类型,枚举,结构体)时候,就用assign

当使用NSString,Block对象时候,就用copy

控制线程安全

nonatomic : 非线程安全的,不加锁,速度快(iOS基本都是用这个)

atomic:线程安全的,加锁,速度慢(默认的)

控制访问权限

readonly 表示只读,只生成getter方法,不生产setter方法

readwrite 表示可读写的,既生成getter又生产setter方法

修改getter和setter方法名称

getter=getter方法的名称

setter=setter方法的名称:

一般当一个成员变量是BOOL类型时候,需要修改getter方法名称,为is+属性名称首字母大写

10.@class 使用格式

@lass 类名;

作用:告诉编译器,@class后面是一个类,但是类中有什么样属性,什么方法都不知道

@class 主要功能就是用来解决循环导入问题

在头文件中使用@class说明这个类

如果在实现文件中有用到这个类的方法或属性,就必须在实现文件(.m文件)导入这个类

11.循环retain,导致在环中的所有对象对象都不能释放,(内存泄露)

解决方法:

只要环中有一条线用retain的,另一条线是assign

注意:用assign的一端在重写dealloc方法时不需要给对方的对象做release释放操作

12.autorelease 基本使用

作用:延迟对象的释放时间

原理:

当一个对象调用autorelease时候,就会把这个对象放到自动释放池中,这时候对象应用计数器没有发生改变

当自动释放池销毁的时候,会对池中所有对象进行一次release操作

当你给一个对象发送多少次autorelease消息,那么当自动释放池销毁时候,就会相应的调用多少次release

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容

  • ARC 一、简介 在Objective-C中采用Automatic Reference Counting (ARC...
    伶俐ll阅读 1,638评论 0 3
  • OC内存管理一、基本原理(一)为什么要进行内存管理。由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制...
    ScaryMonsterLyn阅读 510评论 0 3
  • 今天看到一篇不错的文章关于OC内存管理的,转载一下与你共享概述我们知道在程序运行过程中要创建大量的对象,和其他高级...
    niceSYT阅读 440评论 0 2
  • OC内存管理 一、基本原理 (一)为什么要进行内存管理。 由于移动设备的内存极其有限,所以每个APP所占的内存也是...
    iOS_Developer阅读 386评论 0 3
  • 我不想在悬崖边上徘徊,可是找不到回头的路,只能好好的站在这里,保证不掉下去。 讨厌伤春悲秋,却感叹时...
    潮汐有信阅读 403评论 0 0