【OC学习-11】ARC和内存管理里面的alloc、assign、new、retain、copy、mutableCopy、release说明
来源:互联网 发布:网红晚晚的淘宝店 编辑:程序博客网 时间:2024/05/16 07:09
一般我们在开发程序时,只管alloc,不需要管release,因为有ARC帮我们管理。但是在学习时仍需要了解:内存是有限的,在堆区分配了内存后,如果不需要,则要回收,不然内存不够引起崩溃。
所以原则是:有分配,就有回收。但是这个分配有可能分配好几次,那么回收怎么知道回收几次呢?这就是引用计数的作用。创建一个对象时,它自带了这个引用计数。
(1)alloc、new、copy、mutableCopy和retain时,引用计数+1,即retainCount+1;
(2)release时,引用计数retainCount减1;
(3)漏说的assign不会给引用计数+1,因为assign相当于给原来对象指针起了个别名,但是指针地址和指针指向的内容什么的都没有变化;
具体分别,可以见xiaoxuan415315之前的一篇文章:http://blog.csdn.net/xiaoxuan415315/article/details/8061084
(4)autorelease是延迟释放作用,就是执行到这一句时不会立刻释放,而是等整个@autoreleasepool{}执行完再释放。
在这里,还得知:
//以下语句效果一样ASStudent * zhang=[[ASStudent alloc]init];ASStudent * zhang=[ASStudent new];
最后,常见的内存管理错误,即内存的分配和释放没有匹配:
-(Complex *)add:(Complex *)aSecond{ Complex * result=[[Complex alloc]init]; result.real=self.real+aSecond.real; result.imag=self.imag+aSecond.imag;//下面一定要自动释放一次,因为前面有个alloc。但是在ARC模式下就不需要。 return [result autorelease];}
//错误写法,因为只释放一次,且NSString alloc那个由于没有指针名,想释放还没法释放ASStudent * zhang=[[ASStudent alloc]init];zhang.name=[[NSString alloc]initWithFormat:@"张三"];[zhang release];//正确写法ASStudent * zhang=[[ASStudent alloc]init];temp=[[NSString alloc]initWithFormat:@"张三"];zhang.name=temp;[temp release];[zhang release];
0 0
- 【OC学习-11】ARC和内存管理里面的alloc、assign、new、retain、copy、mutableCopy、release说明
- 内存管理: alloc, retain, release, autorelease, copy, assign
- IOS 学习之 —— 内存管理alloc,assign,retain,copy,release,autorelease
- 关于OC中得内存管理问题,alloc,retain,release,copy,dealloc
- oc MRC内存管理机制alloc/retain/copy/release/autorelease
- IOS retain copy assign alloc atomic nonatomic 内存管理和getter setter方法!
- OC中内存管理 assign, retain, copy 的 setter 和 getter 方法
- OC内存管理 assign retain copy 原型函数
- 【iPhone 編程】alloc, retain, release 和 copy 的概念
- 【iPhone 編程】alloc, retain, release 和 copy 的概念
- OC学习笔记-内存管理、retain、release和retainCount
- 随笔-浅谈内存管理的常用词:alloc、retain、dealloc、release
- OC基础:内存(进阶):retain.copy.assign的实现原理
- alloc、retain、copy、new、autorelease的区别
- copy和mutableCopy,retain
- 内存管理autorelease,retain,copy和assign的set方法和含义
- 内存管理(二):copy、retain、assign
- 内存管理autolease, retain, assign, copy的set方法和含义?
- 数据库表的列查询不到值
- 供应安卓车牌识别
- Java的IO基础学习
- 3孔一红科技厅迎来了又
- Add Two Numbers
- 【OC学习-11】ARC和内存管理里面的alloc、assign、new、retain、copy、mutableCopy、release说明
- 数据库查询语句关键字总结
- 开源License对比分析
- 边际成本
- zoj 2172 Symmetric Order
- jdk 1.6新特性
- 截屏+notification的小例子
- Treap原理和实现方法
- ios检查版本更新