• 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相关推荐

  1. iOS 与OS X多线程和内存管理 笔记 ARC与所有权修饰符

    注:本文为笔记形式,所以很多都是摘抄的.<<iOS 与OS X多线程和内存管理>>书中写的很棒,简单易懂,建议各位看官自己去看看. ####ARC和MRC 前一篇主要是MRC环 ...

  2. Objective-C 内存管理之ARC规则

    基本概念 ARC为自动引用计数,引用计数式内存管理的本质并没有改变,ARC只是自动处理"引用计数"的相关部分. 在编译上,可以设置ARC有效或无效.默认工程中ARC有效,若设置无效 ...

  3. iOS内存管理(ARC,MRC)

    iOS内存管理方式: ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式: 内存管理 ...

  4. 终于明白那些年知其然而不知其所以然的iOS内存管理方式

    终于明白那些年知其然而不知其所以然的iOS内存管理方式 前言 从我开始学习iOS的时候,身边的朋友.网上的博客都告诉我iOS的内存管理是依靠引用计数的,然后说引用计数大于1则对象保存在内存的堆中而引用 ...

  5. 黑马程序员--Objective-C之--OC中的内存管理

    ------IOS培训期待与您交流! ------- 对于面向对象的变成语言,程序需要不断地创建对象. 初始,创建的所有程序通常都有指针指向它,程序可能需要访问这些对象的实例变量或调用这些对象的方法, ...

  6. Objective-c:内存管理

    基本原理 简介 内存管理是程序设计中常见的资源管理的一部分.每个计算机系统可供程序使用的资源都是有限的,这些资源包括内存.打开文件.数量及网络连接等等.如果你使用了某种资源,例如因为打开文件而占用了资 ...

  7. 可能是史上最全面的内存管理文章

    iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与清除内存(比如销毁一个对象,会减少内存占用)的过程 为什么要管理内存 目前iPhone ...

  8. IOS第四节:OC中的内存管理机制

    [自动释放池] [autorelease方法和自动释放池] 每一个对象都有一个autorelease方法,调用autorelease方法之后不会像调用release方法一样马上释放对象, 当一个对象调 ...

  9. 1.1 objective-c中的内存管理

    备注:本来在一年前有一个出版社找到我,让我写一系列关于iOS性能优化的书.但是一直因为工作原因,没有能够按时交付.(其实就是自己懒)所以现在讲已经写好的部分章节分享到博客中,希望对大家有所帮助,如果有 ...

最新文章

  1. php 直接定义json,PHP json_dncode()函数定义与使用方法
  2. Cocoa的MVC架构分析
  3. 使用SSM开发一个校友联络的平台系统
  4. python用户注册(基于django)
  5. scipy笔记:wishart (威沙特分布)
  6. sklearn自学指南(part1)--Machine Learning in Python
  7. 计算机如何实现共享接入,局域网内电脑实现共享设置方法
  8. H264参数SPS(序列参数集)和PPS(图像参数集)说明
  9. BZOJ1492: [NOI2007]货币兑换Cash(CDQ分治,斜率优化动态规划)
  10. 【lucene】lucene高亮显示
  11. Google 工作 4 年,我最终还是选择了离开
  12. Codeforces Round #326 (Div. 2) B. Pasha and Phone C. Duff and Weight Lifting
  13. php app用户验证失败,无法验证app需要互联网连接以认证 建议更换登陆的AppleID
  14. 基于SSH的网上购书系统设计与实现
  15. ApacheCN 活动汇总 2019.7.19
  16. 显示计算机程序的表格如何打开,如何设置打开excel表格的一个窗口显示多标签...
  17. 基于GD32F1x0手动编程实现简易freertos之任务阻塞延时
  18. 微信很好用却很少人知道的浮窗功能
  19. visio添加连接点
  20. Retrofit统一异常处理

热门文章

  1. <随笔03>Java中的两种异常类型
  2. 移动端滚动穿透的6种解决方案
  3. VS2012打开项目 提示Asp.net4.0未在web服务器上注册的解决方案
  4. Jupyter-notebook安装问题及解决
  5. 【手记】解决“未能创建 SSL/TLS 安全通道”异常
  6. 如何在C#中获取Unix时间戳
  7. 如何获取NuGet以安装/更新packages.config中的所有软件包?
  8. mysql怎么约束_MySQL 约束详解
  9. Win11系统中的Thumbs.db文件可以删除吗?
  10. SpringMVC的json数据交互