美文网首页
OC 内存管理

OC 内存管理

作者: 疾风知劲草_erudite | 来源:发表于2017-02-03 15:45 被阅读66次

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

相关文章

  • 内存管理

    一.内存基本介绍 1、OC内存管理的基本概念 2、OC内存管理的范围​管理范围:管理任何继承自NSObject的对...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • OC的内存管理

    1、OC的内存管理 OC是通过引用计数进行内存管理的,其核心思想遵循“谁创建谁释放;谁引用谁管理”。 OC的内存管...

  • iOS之从MRC到ARC内存管理详解

    概述 在iOS中开发中,我们或多或少都听说过内存管理。iOS的内存管理一般指的是OC对象的内存管理,因为OC对象分...

  • iOS五大块知识总结之内存管理

    1.1 管理的原因 只有OC对象才需要管理内存,非OC对象(如:char、int、folat)则不需要管理内存的本...

  • iOS 中堆和栈的区别以及冒泡排序

    在引入堆和栈之前,先要知道,iOS中的内存管理范围: OC对象需要进行内存管理,非oc对象不需要进行内存管理,比如...

  • OC的内存管理

    最近系统地复习了OC的内存管理,所以总结下. OC是通过引用计数(reference count)来管理内存.自...

  • OC关于在MRC模式下的内存管理学习

    内存管理 管理范围 任何继承NSObject的对象 只有OC对象才需要进行内存管理的本质原理 1.OC对象在堆中 ...

  • 《Effective Objective-C 2.0》读书笔记(

    第五章 内存管理 第29条:理解引用计数 OC 中有手动内存管理(MRC) 自动内存管理(ARC)手动内存管理需要...

网友评论

      本文标题:OC 内存管理

      本文链接:https://www.haomeiwen.com/subject/xiydittx.html