IOS OC 内存管理
来源:互联网 发布:软件升级服务 增值税 编辑:程序博客网 时间:2024/06/07 10:02
OC 内存管理
1、真机下,如果一个APP使用的内存超过30M,则系统会向该APP发送Memory Warning消息,收到此消息后APP必须正确处理,否则可能出错或者出现内存泄露甚至崩溃
程序运行时的内存资源的是有限的,object-c语言所编写的程序要实例化对象
对象是要占用内存的如果创建了对象(分配了内存),而不去释放这些对象所占的内存,将会发生内存泄露
需要手动管理内存
管理内存:1、分配内存
2、释放内存
在不需要这个对象的时候即使把这个对象释放掉就可以防止内存泄露(光分配不释放)
怎样判断是否需要释放一个对象?
答:引用计数:是判断一个对象是否存在的标准
得到引用计数公式:对象名.retainCount
什么样的数据需要手动管理内存?、
答:基本数据类型(不能称之为对象,因为它只是一个单一的数据)不用手动管理内存 -> 系统会处理 -> 栈
int a = 10; 栈 ->不需要管理内存
Person *person = [[Person alloc]init]; -> 需要管理内存
除了基本数据类型都需要手动管理内存(需要程序员管理)->堆
程序员开辟的内存属于分配到堆里
系统自动分配的内存会到栈里
内存管理的原则:谁分配谁释放
retainCount引用计数>0的时候就是对象存在的时候 如果不大于0就表示这个对象已经被释放了
生命周期
1、alloc创建之后对象就存在了
2、具体对对象的操作
3、释放对象
引用计数是判断一个对象是否存在的标准(>0)
让引用计数加1的方法
1、alloc new
2、retain保留引用计数
3、copy拷贝
让引用计数减1的方法
1、release释放
2、autorelease延迟释放
MRC:手动管理引用计数
ARC:自动管理引用计数
对象被释放的时候会调用一个销毁对象的方法 delloc ->销毁对象
有一个alloc、retain、copy就要有一个对应的release才能释放掉对象
setter方法的内存管理
- (void)delloc{
[super delloc];
[原来的变量(全局变量) release];
}
- (void)set对象名:(类型)参数名{
if(原来的变量 !=参数名){
[原来的变量 release];
原来的变量 = [参数名 retain];
}
}
内存管理原则:谁分配谁释放
有一个alloc、retain、copy就要有一个对应的release autorelease才能释放掉对象
copy 会产生一个新的而对象
retain是保留引用计数给(原来)对象引用计数+1只要有一个引用计数为0这个对象就会被销毁掉(操作的是同一个对象)
copy产生一个新的对象是给新的对象引用计数+1(跟原来对象没有关系)->如果释放了原来的对象新的对象仍然存在
autorelease:延迟释放等到需要释放的时候才会去释放也会引用计数-1常与自动释放池配合使用
自动释放池:在自动释放池里面的对象只要使用了autorelease在出池的时候就会被统一释放掉
自动释放池有两种写法:
1、 @autoreleasepool {
花括号内表示自动释放池内
}出了花括号就表示出池(所有使用autorelease的对象全部被释放掉)
2、 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
只要在自动释放池对象 release之前都算池内 release之后
[pool release];所有使用autorelease的对象全部被释放掉
属性手动管理计数
ARC:自动管理引用计数
ARC:1、强壮的不会被释放调用<告诉系统这个属性是不能被释放掉的>
2、unsafe_unretained允许在特殊情况下被释放掉不安全的
retain 给同一个对象保留引用计数
目的:为了保证一个对象不会被释放掉给这个对象引用计数+1
如果一个对象被释放掉这个对象就是野指针为了防止使用野指针可以在这个对象释放之后同时给这个对象赋值为空(nil)
对象在自动释放池的生命周期:当对象在自动释放池被创建并使用autorelease对象会在自动释放池出池的时候,被自动释放池统一调用池内全部的autorelease释放全部对象
可以使用在循环创建一些对象的时候不知道什么时候创建使用完毕可以选择使用自动释放池
- IOS OC 内存管理
- IOS--OC--LessonMermory 内存管理
- IOS学习 -- OC内存管理
- IOS之OC内存管理
- 黑马程序员-IOS-OC基础-内存管理
- ios黑马程序员--oc内存管理
- iOS 之OC内存管理(一)
- iOS 之OC内存管理(二)
- 黑马程序员-IOS-OC基础-内存管理
- 《iOS总结》OC内存管理-MickyChiang
- ios开发-OC内存管理的学习
- iOS笔记:第十篇 OC 内存管理
- iOS开发-Day20-OC 手动内存管理
- iOS开发之OC内存管理
- IOS学习之OC内存管理
- IOS开发笔记20-OC内存管理
- ios 开发 OC编程 内存管理
- OC内存管理-OC笔记
- java获取系统时间比实际时间少了8个小时的解决方法
- Java中的拦截器、过滤器、监听器
- project euler 35
- html5中js添加下拉菜单
- OC中的方法
- IOS OC 内存管理
- Android消息机制原理详解(Looper、Handler、MessageQueue)
- project euler 36
- 米4刷win10问题解答
- NYOJ 119士兵杀敌(三)【RMQ裸题】
- GCD Extreme 【FZU--1969】
- 大数据时代:生活、工作与思维的大变革(上)
- HDU 1086 You can Solve a Geometry Problem too
- Ubuntu15.04+caffe+cuda+cudnn+matlab