Objective-C(9)内存管理之ARC
ARC机制及判断准则
ARC:Auto Reference Counting 自动引用计数
是一种编译器机制,在编译过程中,为我们的代码添加retain、release、autorelease等方法
在iOS7.0之后强制使用,使程序员不用再关心内存管理,要求:
1)不能使用retain release等操作引用计数的方法
2)不可以使用autorelease方法,但能够使用自动释放池
3)重写dealloc方法中不能再使用[super dealloc]
判断准则:
只要没有强指针指向对象,就会释放对象
强指针:__strong (默认)
弱指针:__weak
不要出现这样的代码:
__weak Person *p = [[Person alloc] init];
ARC机制下不允许调用方法autorelease,但并没有舍弃@autoreleasepool
ARC仅仅是在编译时帮助你加入retain/release/autorelease的代码调用。
所以,ARC之下使用@autoreleasepool依然有效,保证池子中的对象延迟释放。
@property的内存管理参数
@property的内存管理参数strong表示强指针属性,weak表示弱指针参数。
简单记忆:属性为OC对象时
使用strong代替retain
使用weak代替assign。使用weak参数解决循环引用问题
MRC:
retain:release属性旧值,retain属性新值
assign:直接赋值,不改变引用计数 (默认)
一般用于非OC对象,以及不占有对象的情况下
copy:release旧值,copy新值,一般用于NSString
ARC:
strong:强指针,相当于retain,用于对象
weak:弱指针,用于对象
assign:用于非OC对象
copy:用于NSString
MRC与ARC
将MRC项目修改为ARC:
Xcode edit-》refactor—》Convert to OC ARC
让ARC项目中的某些.m文件不使用ARC
项目配置中—》Build Phases—》Compile Sources中
为指定的.m文件设置Compiler Flags:-fno-objc-arc
让非ARC项目中的某些.m文件使用ARC:
Compiler Flags:-f-objc-arc
转载于:https://blog.51cto.com/annmeng/1745690
Objective-C(9)内存管理之ARC相关推荐
- iOS 与OS X多线程和内存管理 笔记 ARC与所有权修饰符
注:本文为笔记形式,所以很多都是摘抄的.<<iOS 与OS X多线程和内存管理>>书中写的很棒,简单易懂,建议各位看官自己去看看. ####ARC和MRC 前一篇主要是MRC环 ...
- Objective-C 内存管理之ARC规则
基本概念 ARC为自动引用计数,引用计数式内存管理的本质并没有改变,ARC只是自动处理"引用计数"的相关部分. 在编译上,可以设置ARC有效或无效.默认工程中ARC有效,若设置无效 ...
- iOS内存管理(ARC,MRC)
iOS内存管理方式: ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式: 内存管理 ...
- 终于明白那些年知其然而不知其所以然的iOS内存管理方式
终于明白那些年知其然而不知其所以然的iOS内存管理方式 前言 从我开始学习iOS的时候,身边的朋友.网上的博客都告诉我iOS的内存管理是依靠引用计数的,然后说引用计数大于1则对象保存在内存的堆中而引用 ...
- 黑马程序员--Objective-C之--OC中的内存管理
------IOS培训期待与您交流! ------- 对于面向对象的变成语言,程序需要不断地创建对象. 初始,创建的所有程序通常都有指针指向它,程序可能需要访问这些对象的实例变量或调用这些对象的方法, ...
- Objective-c:内存管理
基本原理 简介 内存管理是程序设计中常见的资源管理的一部分.每个计算机系统可供程序使用的资源都是有限的,这些资源包括内存.打开文件.数量及网络连接等等.如果你使用了某种资源,例如因为打开文件而占用了资 ...
- 可能是史上最全面的内存管理文章
iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与清除内存(比如销毁一个对象,会减少内存占用)的过程 为什么要管理内存 目前iPhone ...
- IOS第四节:OC中的内存管理机制
[自动释放池] [autorelease方法和自动释放池] 每一个对象都有一个autorelease方法,调用autorelease方法之后不会像调用release方法一样马上释放对象, 当一个对象调 ...
- 1.1 objective-c中的内存管理
备注:本来在一年前有一个出版社找到我,让我写一系列关于iOS性能优化的书.但是一直因为工作原因,没有能够按时交付.(其实就是自己懒)所以现在讲已经写好的部分章节分享到博客中,希望对大家有所帮助,如果有 ...
最新文章
- php 直接定义json,PHP json_dncode()函数定义与使用方法
- Cocoa的MVC架构分析
- 使用SSM开发一个校友联络的平台系统
- python用户注册(基于django)
- scipy笔记:wishart (威沙特分布)
- sklearn自学指南(part1)--Machine Learning in Python
- 计算机如何实现共享接入,局域网内电脑实现共享设置方法
- H264参数SPS(序列参数集)和PPS(图像参数集)说明
- BZOJ1492: [NOI2007]货币兑换Cash(CDQ分治,斜率优化动态规划)
- 【lucene】lucene高亮显示
- Google 工作 4 年,我最终还是选择了离开
- Codeforces Round #326 (Div. 2) B. Pasha and Phone C. Duff and Weight Lifting
- php app用户验证失败,无法验证app需要互联网连接以认证 建议更换登陆的AppleID
- 基于SSH的网上购书系统设计与实现
- ApacheCN 活动汇总 2019.7.19
- 显示计算机程序的表格如何打开,如何设置打开excel表格的一个窗口显示多标签...
- 基于GD32F1x0手动编程实现简易freertos之任务阻塞延时
- 微信很好用却很少人知道的浮窗功能
- visio添加连接点
- Retrofit统一异常处理
热门文章
- <随笔03>Java中的两种异常类型
- 移动端滚动穿透的6种解决方案
- VS2012打开项目 提示Asp.net4.0未在web服务器上注册的解决方案
- Jupyter-notebook安装问题及解决
- 【手记】解决“未能创建 SSL/TLS 安全通道”异常
- 如何在C#中获取Unix时间戳
- 如何获取NuGet以安装/更新packages.config中的所有软件包?
- mysql怎么约束_MySQL 约束详解
- Win11系统中的Thumbs.db文件可以删除吗?
- SpringMVC的json数据交互