关于ARC和MRC

news/2024/7/20 15:05:30 标签: 内存管理, c/c++, xcode
1 ARC是IOS5.0以后才支持,IOS7.0以后,强制使用ARC
2 ARC Automatic Refercences Counting
3 原理
 依然使用引用计数器来管理内存,只是引用计数器的操作方式不同,由程序员发送消息转换为编译器帮我们发送消息,会在合适的位置自动加入retain、release、autorelease消息来进行计数管理,ARC是一种编译期语法。
4 使用ARC
* 在ARC中,程序中不能出现retain、release、autorelease
* 在ARC中,程序不能在dealloc方法中显示调用父类的dealloc方法,一切在MRC中和内存相关的操作,ARC中都不能使用。
5 强引用
* 在程序中定义的引用,默认就是强引用,所谓的强引用指向一个对象时,对象的引用计数器会自动加1,当引用超出作用域,对象的引用计数器自动减1,
* 定义强引用:__Strong Student* stu = [[Student alloc] init];
* 当一个对象被引用指向时,此对象会隐式的retain一次,当强引用超出作用域时,指向的对象会隐式的release一次
* 引用在使用的时候,会根据作用域的范围,自动做加1减1操作
6 弱引用
__weak Student* stu = [[Student alloc] init];
* 仅仅就是指向对象,
* 当一个弱引用指向的对象,未销毁时,向对象发送消息,会自动变为强引用
* 当一个弱引用指向的对象被销毁时,弱引用本身会自动的赋值为nil
7 定义属性的时候,内存管理的描述
@property(nonatomic,strong)
@property(nonatomic,weak)
修改arc为yes方法:点击项目名称->在搜索框输入arc->找到Object-C Automatic Refercences Counting修改为yes
8 其他修饰关键字
@property(nonatomic,__unsafe__unretained)int age;
*__unsafe__unretained等同于assign,功能和weak几乎一样,唯一的不同,没有"zeroing weak reference",通常用在基本数据类型
* __autoreleaseing用在方法的返回值,将返回值的对象放入到自动释放池中。
9 dealloc方法
在ARC中,dealloc方法不允许调用父类 的dealloc方法,当然也不允许向任何对象发送release消息,所以说dealloc方法几乎不用,在一些特殊情况下需要重写dealloc方 法。1、在类中使用了C语言中的函数malloc分配内存。2、在类中使用了C++语言中的函数new等方式创建内存空间。此时需要在dealloc中对 这些特殊的空间进行释放。
10 声明引用自动置空
* 在ARC下,如果定义了一个引用没有赋值,编译会自动的初始化设置引用为空值,Student* stu;
* 为了尊重C语言的规范,基本数据类型没有初始化,依然是垃圾值。
11 MRC和ARC的混用
* 把MRC的代码转换成ARC的代码,删除内存管理操作(手动)
* xcode提供了自动将MRC转换成ARC的功能,操作菜单栏edit -> Refacotor(重构) -> Convert to Objective-C ARC
* 在ARC项目中继续使用MRC编译的类,在编译选项中标识MRC文件即可"-fno-objc-arc"
* 在MRC项目中继续使用ARC编译的类在编译选项中标识MRC文件即可"-fobjc-arc"
 

转载于:https://www.cnblogs.com/wmwblog/p/4972666.html


http://www.niftyadmin.cn/n/1276528.html

相关文章

链表与顺序表

顺序表: 顺序表是用一组地址连续的存储单元来保存数据的,使用之前必须指定其长度,一但内存分配,不可动态改变大小。所以它具有随机存取,查找快速的特点,但是做插入或删除动作是,需要移动大量元素&#xff0…

数学战神app(小学生四则运算app)开发需求及进度

项目名字:“数学战神” 开发环境:Android eclipse 团队名称:战神联盟 团队成员:陈思明,许家豪,王宏财,吴旭涛 在之前的四则运算APP中添加更多的实用功能,并在各种平台推广宣传。 预加…

网络工程实训_1路由器介绍

实验1:路由器介绍。包括:认识路由器;通过console口访问路由器;通过telnet访问路由器。 一、实验目的 1.计算机的串口和路由器Console口的连接方法; 2.使用Windows系统自带的超级终端软件配置路由器; 3.路由…

MyBatis 配置文件 与 约束

1、MyBatis 主配置文件 mybatis.xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuratio…

市场or市值-Android和IOS浅谈

2019独角兽企业重金招聘Python工程师标准>>> 谷歌在2008年初推出Android&#xff0c;并公布了源代码。除了Apple和Nokia&#xff0c;Samsung、HTC、LG等都对其青睐有加。各式机型层出不穷、可选择区间大、性价比高。正因机型众多&#xff0c;Android的App无法针对每…

mybatis动态sql模糊查询方法

动态SQL可以省略很多拼接SQL的步骤&#xff0c;使用类似于JSTL方式。 方式1 &#xff1a; <select id"queryBlogIf" resultType"blog" parameterType"map">select * from mybatis.blog where 1 1<if test"title!null">a…

mybatis动态创建表

转自&#xff1a;https://www.cnblogs.com/Joanna-Yan/p/9187538.html 项目中业务需求的不同&#xff0c;有时候我们需要动态操作数据表&#xff08;如&#xff1a;动态建表、操作表字段等&#xff09;。常见的我们会把日志、设备实时位置信息等存入数据表&#xff0c;并且以一…

Asp.Net 之 调用远程Web_Service

一、添加web service引用 1、右键 Web 项目 → “添加服务引用”&#xff1b; 2、右键已有的 App_WebReferences 文件夹 → “添加服务引用”&#xff1b; 二、引用远程web service 说明&#xff1a; 命名空间(ServiceReferenc)&#xff1a;隶属于解决方案的名字空间&#xff1…