IOS基础之 (十一) 内存管理 ARC
一 内存管理
1. set 方法内存管理的相关参数
retain: release旧值,retain新值(值适用于OC对象)
assign:直接赋值(set方法默认,适用于非OC对象类型,即基本数据类型,也包括枚举和结构体)
copy : release 旧值, copy 新值(NSString)
2. 是否生成set方法
readWrite: 读写(同时声明和实现 setter, getter,默认)
readonly:只读(只会生声明和实现getter方法)
3.多线程管理
nonatomic:性能高
atomic:性能低(默认使用这个)
4. setter和getter方法的名称
setter:给set方法改个名字,一定要有冒号( : )
getter: 给get 方法改个名字(BOOL类型用的较多)。
@property [getter=isRich] BOOL rich;
二 模型类
模型就是用来装数据,就是一个存放数据的类,就叫做模型类。
发微博的人: 名字,微博账号,密码,头像,性别, 生日
发的微博: 写微博的人,微博内容, 标题,微博图,转发微博,被评论, 被转发
三 循环引用
循环引用:你引用我,我引用你
1. @class的作用:仅仅告诉编译器有这么一个类,并不知道里面有什么。
@class person 告诉编译器有person这个类,
2.开发中引用一个类的规范。
在.h文件中用@class声明。
在.m文件中用#import来包含类中所有的东西。
3.为什么要用@class?
@class和性能有关,可以循环引用,还可以提高编译效率。
@import作用是拷贝。
4.两端循环应用的解决方案
一端用assign ,另一端用 retain。
四 autorelease基本使用法
1.首先把一个对象发到池子中。
2.当自动释放池被销毁时,会对里面的对象做一次release操作
3.返回对象本身。
4.调用完autorelease后,对象的计数器是不变,不会对它减一。
5.如果调用了两次 autorelease后,会报错,野指针错误。
autorelease的好处
不用再去关心对象的释放时间
不在关心什么时候去调用release.
autorelease使用注意:
占用内存较小的对象不在随便的使用 autorelease.
错误写法:
如果调用了两次autorelease,会报错,野指针。
@autoreleasepool{
//这样写是错误的,在面试中常见
Person *p = [[[[Person alloc]init]autorelease]autorelease];
}
内存管理总结:
1. 计数器的操作
retain +1
release -1
retianCount 获得计数器
2. set方法的内存管理
- (void)setCar: (Car *) _car{
if( _car != car){
[_car release];
_car = [car retain];
}
}
dealloc 方法的实现
- (void)dealloc(){
[_car release];
[super dealloc];
}
3 @property参数
OC对象类型
非OC对象类型
ARC : ARC是编译器特性。当编译器发现 retian 或者 alloc,自动帮我们插入代码(release)
ARC的判断准则:只要没有强指针指向对象,对象就会被释放。
强指针:默认情况下都是强指针。__strong 是双下划线。
__strong Person *p2 = [[Person alloc]init];
弱指针:__weak
__weak Person *p = [[Person alloc]init];
NSLog(@"%@" , p); //错误的写法
两端循环引用的时候:
ARC:
一端用strong,另一端用weak。
非ARC:
一端用retain,另一端用assign。
参考资料:
http://www.cnblogs.com/silence-wzx/p/5140978.html
http://www.cnblogs.com/wxios/articles/4175468.html
http://www.cnblogs.com/chars/p/5232109.html
IOS基础之 (十一) 内存管理 ARC的更多相关文章
- IOS基础 Day-1手动内存管理
辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1 手动内存管理 主要内容:release retain必须配对好,不然会占用内存 慢慢积累导 ...
- IOS基础之 (十) 内存管理
一 基本原理 1.什么是内存管理 移动设备的内存有限,每个app所能占用的内存是有限制的. 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用 ...
- iOS内存管理 ARC与MRC
想驾驭一门语言,首先要掌握它的内存管理特性.iOS开发经历了MRC到ARC的过程,下面就记录一下本人对iOS内存管理方面的一些理解. 说到iOS开发,肯定离不开objective-c语言(以下简称OC ...
- 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)
@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=Syn ...
- iOS性能优化之内存管理:Analyze、Leaks、Allocations的使用和案例代码
最近接了个小任务,和公司的iOS小伙伴们分享下instruments的具体使用,于是有了这篇博客...性能优化是一个很大的话题,这里讨论的主要是内存泄露部分. 一. 一些相关概念 很多人应该比较了解这 ...
- OC内存管理(ARC)
1.什么是ARC Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入 的最大的变革和最激动人心的变化.ARC是新的LLVM 3. ...
- iOS中引用计数内存管理机制分析
在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...
- OC基础15:内存管理和自动引用计数
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...
- OC 内存管理之自动内存管理ARC
一.基本简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因 ...
随机推荐
- apply,call,bind的区别
apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...
- 课题:如何培养自己的SEO资源
课题:如何培养自己的SEO资源 问:做SEO最重要的是什么?[针对性的流量]答:看获取一样东西的门槛.稀缺性,人人可得价值不大外链 内容 流量[正确]针对性的自然流量是用户自愿带来的,价值高,能形成购 ...
- findstr()与strfind()的区别
matlab中这两个字符串查找的函数findstr(), strfind()表明上看起来用法相似,效果也相似. 1. findstr(s1,s2)--在较长的字符串中查找较短的字符串出现的次数,并返回 ...
- Java系列:关于Java中的桥接方法
这两天在看<Java核心技术 卷1>的泛型相关章节,其中说到了在泛型子类中override父类的泛型方法时,编译器会自动生成一个桥接方法,这块有点看不明白. 书上的例子代码如下: publ ...
- 20145222黄亚奇《Java程序设计》实验二实验报告
20145222<Java程序设计>第2次实验报告 实验步骤与内容 一.实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L. ...
- HoloLens开发手记 - Unity之摄像头篇
当你穿戴好HoloLens后,你就会处在全息应用世界的中心.当你的项目开启了"Virtual Reality Support"选项并选中了"Windows Hologra ...
- Flex的正则表达式匹配速度与手工代码的比较
flex是一个词法分析器生成器,它是编译器和解释器编程人员的常用工具之一.flex的程序主要由一系列带有指令(称为动作代码)的正则表达式组成.在匹配输入时,flex会将所有的正则表达式翻译成确定性有穷 ...
- 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计
这一章讲了MPI非阻塞通信的原理和一些函数接口,最后再用非阻塞通信方式实现Jacobi迭代,记录学习中的一些知识. (1)阻塞通信与非阻塞通信 阻塞通信调用时,整个程序只能执行通信相关的内容,而无法执 ...
- Object C学习笔记22-#define 用法
上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...
- Unity3D 的摄像机
什么是摄像机 Unity3D中,摄像机是一个非常非常重要的组件. 他的作用就是:将你设计的场景投影到设备的屏幕上. 摄像机的属性 1 clear flags 确定屏幕的哪一部分将被清除. 每个摄像机在 ...