ARC下的内存管理
1.ARC下单对象内存管理
- 局部变量释放对象随之被释放
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init];
} // 执行到这一行局部变量p释放
// 由于没有强指针指向对象, 所以对象也释放
return 0;
}
- 清空指针对象随之被释放
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init];
p = nil; // 执行到这一行, 由于没有强指针指向对象, 所以对象被释放
}
return 0;
}
- 弱指针需要明确说明
注意: 千万不要使用弱指针保存新创建的对象
int main(int argc, const char * argv[]) {
@autoreleasepool {
// p是弱指针, 对象会被立即释放
__weak Person *p1 = [[Person alloc] init];
}
return 0;
}
2.ARC下多对象内存管理
- ARC和MRC一样, 想拥有某个对象必须用强指针保存对象, 但是不需要在dealloc方法中release
@interface Person : NSObject // MRC写法
//@property (nonatomic, retain) Dog *dog; // ARC写法
@property (nonatomic, strong) Dog *dog; @end
3.ARC下循环引用问题
- ARC和MRC一样, 如果A拥有B, B也拥有A, 那么必须一方使用弱指针
@interface Person : NSObject //@property (nonatomic, retain) Dog *dog;
@property (nonatomic, strong) Dog *dog; @end @interface Dog : NSObject // 错误写法, 循环引用会导致内存泄露
//@property (nonatomic, strong) Person *owner; // 正确写法, 当如果保存对象建议使用weak
//@property (nonatomic, assign) Person *owner;
@property (nonatomic, weak) Person *owner;
@end
4.ARC下@property参数
- strong : 用于OC对象, 相当于MRC中的retain
- weak : 用于OC对象, 相当于MRC中的assign
- assign : 用于基本数据类型, 跟MRC中的assign一样
//
// Person.h #import <Foundation/Foundation.h> @class Dog; @interface Person : NSObject // MRC, A对象想拥有B对象, 需要对B对象进行一次retain
// A对象不用B对象了, 需要对B对象进行一次release
// property的时候进行retain, dealloc的时候进行release // ARC, A对象想拥有B对象, 那么就需要用一个强指针指向B对象
// A对象不用B对象了, 什么都不需要做, 编译器会自动帮我们做 // 在ARC中保存一个对象用strong, 相当于MRC中的retain
@property(nonatomic, strong)Dog *dog; @end
ARC下的内存管理的更多相关文章
- iOS: ARC & MRC下string内存管理策略探究
ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作 ...
- 【转】iOS夯实:ARC时代的内存管理
iOS夯实:ARC时代的内存管理 什么是ARC Automatic Reference Counting (ARC) is a compiler feature that provides autom ...
- iOS夯实:ARC时代的内存管理
iOS夯实:ARC时代的内存管理 文章转自 ARC时代的内存管理 什么是ARC Automatic Reference Counting (ARC) is a compiler feature tha ...
- iOS开发ARC机制下的内存管理技术要点
转载一篇: iOS开发ARC内存管理技术要点.ARC内存管理原则总结.iOS ARC内存管理总结 ARC内存管理机制 (一)ARC的判断准则: 只要没有任何一个强指针指向该对象,该对象就会被释放. ( ...
- ARC下的内存泄露
iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用ARC并不代表了不会发生内存泄露,使用不当照样会发生内存泄露. 下面列举两种ARC导致内存泄露的情况. 1,循环参照 A有个属性参照B, ...
- ARC时代的内存管理
什么是ARC Automatic Reference Counting (ARC) is a compiler feature that provides automatic memory manag ...
- iOS- 非ARC的项目内存管理细节详解(实战)
1.前言 接上文:iOS- 如何将非ARC的项目转换成ARC项目(实战) 2.内存管理时相关的配置 当我们把将非ARC的内存管理都管理好后,发现在做有些操作的时候内存还是在一直的缓慢增加 比如做一个最 ...
- ARC机制集合内存管理
// // main.m // 13-ARC机制集合内存管理 // // Created by apple on 14-3-21. // Copyright (c) 2014年 apple. ...
- glibc下的内存管理
在解码过程中我们也遇到了类似的问题,第一次解码的音频比较大60s,耗了3G的内存,reset之后内存并没有退还给操作系统,第二次即使解一个10s的音频 几周前我曾提到,我被项目组分配去做了一些探究li ...
随机推荐
- 基于Java swing+mysql+eclipse的【图书管理系统】
本项目为Java swing项目,在工作环境中基本使用不到,但是很多学校把这个当做编程入门的项目来做,故分享出本项目供初学者参考. CSDN赞助下载:https://download.csdn.net ...
- Java代码实体类生成SQL语句(Java实体类转数据库)
有的时候把数据库删了,如果照着实体类重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体类转换为SQL语句输出为一个文件,打开执行命令即可. 下载:ht ...
- Java面向对象笔记 • 【第2章 面向对象进阶】
全部章节 >>>> 本章目录 2.1 成员变量 2.1.1 成员变量与局部变量的区别 2.1.2 成员变量的使用 2.1.3 实践练习 2.2 this关键字 2.2.1 ...
- SpringBoot 中过滤器的简介及使用方式
过滤器简介 过滤器依赖Servlet容器,属于Servlet规范的一部分. 在实现上基于Servlet容器的函数回调,可以对几乎所有请求进行过滤. Filter的生命周期由Servlet容器管理. 过 ...
- Pytest_定制allure报告(12)
定制报告需要先导入allure模块,再使用以下装饰器方法: feature: 标注主要功能模块. story: 标注feature功能模块下的分支功能. description:在报告中显示用例描述. ...
- 查询 Oralce 某 schema 所拥有的权限
--https://dba.stackexchange.com/questions/14901/oracle-list-users-with-access-to-certain-tables sele ...
- Go语言系列之RabbitMQ消息队列
1. RabbitMQ是什么? MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 生活场景: 1.其实我们在双11的时候,当我们凌晨大量的秒 ...
- Zookeeper介绍一
Zookeeper是什么 ZooKeeper是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终,将简单易用的接口和性能高效.功能稳定 ...
- 如何让 Hexo 在服务器稳定运行
声明 本文地址:如何让 Hexo 在服务器稳定运行 背景 博客系统终于又搭建起来了(好一个又),但是每隔一段时间去访问自己的网站总是访问不到,去服务器查询 ps aux | grep hexo,发现 ...
- 12.25 补充总结-jsp标签
注:标签引用时,需在jsp 头部添加如下语句 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c ...