内存管理-MRC

MRC内存管理

环境:先关闭arc模式,选中项目-》build Settings

需记住Tips:

1.alloc,new, retain, copy,mutableCopy 需要release或autorelease

2.self 在实例方法(动态方法)代表当前类,在类方法(静态方法)中谁调用则代表谁,调用类方法的对象不需要进行释放
(一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存)

3.在方法后后面添加autorelease,会把对象交给autoreleasepool释放,但不建议把太多对象交于autoreleasepool,会占用内存


4.内存释放后,retainCount=0时,会调用-(void)dealloc方法
5.[[student alloc]init];即使不是student *stu=[[student alloc]init];也会分配内存
6.[[student alloc]init];等同[student new];
7.野指针,访问已释放的内存地址,程序会奔溃
release对象后,retainCount=0时,对象释放,但指向该对象的指针并未释放,仍存储着原来对象的地址,通过=nil来释放该指针

property属性:
retain:继承了NSObject对象才需要retain,release旧值,retain新对象
如:

assign:基本数据类型,默认setter方法直接赋值,不涉及内存释放问题
atomic 线程加锁,保证线程安全,防止写入未完成,被其他线程访问,但耗性能
nonatomic 不需要考虑线程安全,禁止多线程,提高性能
readonly 只读
readwrite 读写
copy/mutableCopy:release旧对象,copy新对象

copy生成对象为不可变对象,mutableCopy生成对象为可变对象
不可变对象copy为不可变对象,为浅复制,其余为深复制
//浅复制,复制指针,指向原对象,原对象内存计数器+1
//深复制,复制对象,原对象内存计数器不变,新对象内存计数器为1

实例:(了解浅复制、深复制的概念,基本了解了内存管理的概念)

时间: 2024-10-10 15:54:49

内存管理-MRC的相关文章

Objective-c的内存管理MRC与ARC

Objective-c的内存管理MRC与ARC Objective-c中提供了两种内存管理机制MRC(MannulReference Counting)和ARC(Automatic Reference Counting),分别提供对内存的手动和自动管理,来满足不同的需求.注意的是Xcode 4.1及其以前版本没有ARC,MRC与ARC的区别如图1所示.需要理解MRC,但实际使用时强推ARC. 图1  MRC与ARC区别示意图   1. Objective-c语言中的MRC(MannulRefer

iOS开发之oc(十一)--内存管理MRC

掌握内容 >理解内存管理的原理 >掌握手动内存管理MRC >掌握内存管理在实际工程中的使用 (一) 1.理解部分 1.1内存管理 (传统内存管理demo) 1.1.1内存管理做了一件什么事? 内存管理就是确保开辟的堆空间得到正确的释放 如果堆空间没有释放,称为内存泄露 使用已释放的堆空间,称为提前释放 重复释放同一个空间,称为重复释放 1.1.2传统内存管理的困境 (1)当我们要释放一个堆,首先要确定使用这个堆的指针,都访问完毕,避免提前释放. (2)释放指针指向的堆空间,首先要确定那些

OC 内存管理:MRC与ARC

内存中的五大区域: 栈区,堆区,BBS段,数据段和代码段,其中除了堆区以外,其他区域的内存管理由系统自行回收 OC对象是存储在堆区的,所以OC的内存管理主要是对”堆区中的OC对象”进行管理 内存管理中的几个概念: ->引用计算器:既retainCount,每个OC对象内部都有1个8字节空间用来存储retainCount,表示有多少”人”正在使用; 对象刚被创建时,默认计数值就为1,当计数值为0时,系统会自动调用dealloc方法将对象销毁 引用计数器的用法:给对象发送相应的技术操作来改变计数器的

iOS-旧项目中手动内存管理(MRC)转ARC

在ARC之前,iOS内存管理无论对资深级还是菜鸟级开发者来说都是一件很头疼的事.我参 加过几个使用手动内存管理的项目,印象最深刻的是一个地图类应用,由于应用本身就非常耗内存,当时为了解决内存泄露问题,每周都安排有人值班用 Instruments挨个跑功能,关键是每次都总能检查出来不少.其实不管是菜鸟级还是资深级开发者都避免不了写出内存泄露的代码,规则大家都懂,可是 天知道什么时候手一抖就少写了个release? 好在项目决定转成ARC了,下面将自己转换的过程和中间遇到的问题写出来和大家共享,希望

OC基础 05-手动内存管理(MRC)

---恢复内容开始--- MRC: Manul(手动) Reference(引用) Counting(计数) 什么是手动引用计数? 所有对象的内容都需要我们手动管理, 需要程序员自己编写release/retain等代码 内存管理的原则就是有加就有减 也就是说, 一次alloc/new/copy对应一次release, 一次retain对应一次relese 内存管理的重要性: 移动设备的内存极其有限,每个app的占用内存也是有限制的. 当我们创建一个OC对象,定义一个变量,调用一个函数或者方法,

内存管理-MRC与ARC详解

Objective-C提供了两种内存管理机制MRC(Mannul Reference Counting)和ARC(Automatic Reference Counting),为Objective-C提供了内存的手动和自动管理.下面我们来讲解MRC和ARC的基本概念以及自己的理解,欢迎大家指正!!! 一.前言 在讲述MRC和ARC之前,我们先来看一下Objective-C的引用计数式的内存管理方式.下面是一些特点: 自己生成的对象,自己持有.(通过alloc/new/copy/mutableCop

object-C 手动内存管理(MRC)

object-C的内存管理和javascript的垃圾回收不一样,今天总结下手动内存管理,ARC的后边补上. 1:基本铺垫 oc采用引用计数来表示对象的状态,比如通过init创建出来的一个对象引用计数为1,如果想让它释放则对这个对象发送一条release消息,则引用计数-1,那怎么+1呢,给这个对象发送retain消息. 对象操作 Object-C方法 生成并持有对象 alloc/new/copy/mutableCopy方法 持有对象 retain方法 释放对象 release方法 废弃对象 d

OC内存管理(MRC)

首先说明一下几块存储区域:栈区(局部变量.函数参数值).堆区(对象.手动申请/释放内存).BSS区(未初始化的全局变量.未初始化的静态数据).常量区(字符串常量以及初始化后的全局变量.初始化后的静态数据).代码区(存放函数体的二进制代码) 1.为什么需要内存管理 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当某个APP所占用的内存超过系统规定限定内存大小时,系统就会发出内存警告,系统会向该APP发送Memory Warning消息.收到此消息后,需要该APP回收一些不需要再

OC 内存管理之手动内存管理MRC(MannulReference Counting)

一.    基本原理 1.        什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象.变量等 管理范围:任何继承了NSObject的对象,对其他基本数据类型(int.char.float.double.struct.enum等)无效 2.        对象的基本结构 每个OC对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,即有多少人