iOS之MRC和ARC

1.栈放局部变量(代码结束就释放,系统自动回收)堆放对象(动态分配)

2.每个对象里分配4个字节的存储空间放 引用计数器 当引用计数器值为0时对象占用的内存自动被回收自动回收,引用计数器的初始值是1.

3.retain 引用计数器+1   release引用计数器-1

4.可以给对象发送(调用)retainCount来接收当前的引用计数器的值

5.重写dealloc(对象遗言)来判断是否回收对象内存,都要调用

[super dealloc](写在方法最后)

6.使用alloc new copy retain计数器为1.只要出现了上面3个,就必须要出现release或者autorelease;

7.retain返回的是调用它的本身,release没有返回值

8.野指针:指向僵尸对象(不可用内存)的指针。防止野指针例如:p=nil;

9.EXC-BAD-ACCESS访问已经被释放的内存(野指针错误)。僵尸对象后再用retain是不行的。(人死不能复生)

10.僵尸对象:所占有内存已经被回收的对象。

11.property的retain参数只适用于OC对象类型:release旧值,retain新值。

12.property中的多线程nonatomic性能高,atomic性能低,一般用nonatomic

13.property中参数的setter:决定了set方法的名称,一定要加冒号。getter决定了get方法的名称

14.当一个方法的返回值是bool时用is开头(规范)

15.在实际开发中不能打开实时对象检测;

16.在OC中用nil调用方法不会出现异常;

17.内存泄漏就是不被使用的对象一直在内存中没有被销毁

18.如果一个程序中出现互引用问题,那么一端对象的@property参数用assign

19.在互引用问题中开发中引用一个类的规范

1> 在.h文件中用@class来声明类

2> 在.m文件中用#import来包含类的所有东西

20.在dealloc方法中的[super dealloc]要写在最后面;

21.不管对象是在@autoreleasepool大括号之内还是之外,只要在大括号里面调用对象的autoreleasepool就有作用

22.只有在自动释放池的作用域中调用对象的autoreleasepool方法才能正常的使用

23.在ARC机制中不能再去调用release,retain和[super dealloc];

24.只要没有强指针指向的对象,ARC中立即被自动回收,默认情况所有指针都是强指针;

25.__weak中是两个弱指针

iOS之MRC和ARC,布布扣,bubuko.com

时间: 2024-08-12 10:31:38

iOS之MRC和ARC的相关文章

iOS之mrc转arc

一.前言 项目简介 需要转换的Objective-C文件数量:1000个左右. 开发工具:Xcode 8.0.1 转换方式 我使用的是Xcode本身提供的ARC转换功能.当然你也可以手动手动转换,那不属于本文范畴,而且其工作量绝对能让你崩溃. 二.转换过程 代码备份 在进行如此大规模的更改之前,一定要先进行代码备份:直接在本地将代码复制一份,或者记住更改前代码在VCS上的版本号. 过滤无需转换的文件 找出项目中引用的仍使用手动内存管理的第三方库,或者某些你不希望转换的文件,对其添加-fno-ob

iOS中MRC和ARC混编

1. 在targets的build phases选项下Compile Sources下选择,不使用arc编译的文件,双击它,输入 -fno-objc-arc 即可(这个类就可以使用MRC模式) 2. MRC工程中也可以使用ARC的类.方法如下: 在targets的build phases选项下Compile Sources下选择要使用arc编译的文件,双击它,输入 -fobjc-arc 即可 版权声明:本文为博主原创文章,未经博主允许不得转载.

iOS中MRC与ARC混编

如果是工程是ARC的,需要编译MRC的三方类库与文件则需要设置一下Compiler Flags. 步骤如下:打开工程选择工程文件-->选择TARGETS-->选择Build Phases-->选择Compile Sources-->选择MRC实现的文件-->双击对应文件下的Compiler Flags-->添加-fno-objc-arc 同理如果工程是MRC的,需要编译ARC的三方类库与文件,在相应处添加-fobjc-arc即可

iOS中单例模式:MRC和ARC+GCD实现

iOS中单例模式的实现一般分为两种:MRC和ARC+GCD 1.MRC(非ARC) 非ARC的单例的实现方式: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <span style="font-family: 仿宋; font-size: 15px;">#import <Foundation/Foundation.h> @inter

iOS内存管理(ARC,MRC)

iOS内存管理方式: ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式: 内存管理的问题: 1.内存泄露:不再需要的对象没有释放. 2.野指针:正在使用的对象提前释放. 引用计数: 1.每一个对象上都有一个引用计数器 2.当对象出生时引用计数器为1 3.当对象调用retain方法时引用计数器+1 4.当对象调用release方法时引用计数器-1 5.当一个对象引用计数为0时,这个

OC 内存管理:MRC与ARC

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

OC_内存管理:MRC与ARC

内存管理 1.1内存管理 1.1.1 C的内存管理,以及麻烦之处 char *p = (char *)malloc(100*sizeof (char)); 这是C的动态内存分配,我们手动跟系统申请了100个字节的内存:或者说系统在堆里开辟了100个字节的空间,并将这个空间的首地址返回给指针变量p. free(p); 使用完成后,手动跟系统释放内存空间:或者说系统回收空间. 如上就是C里简单的内存管理. C的内存管理,我们手动申请,手动释放.这样来看,我们只需要注意三个问题就好了: 1,申请内存,

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

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

内存管理-MRC与ARC详解

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