ios黑马程序员--oc内存管理
2014-10-15 21:27
274 查看
内存管理概念
对象在内存中使用玩之后
拿iphone 4;来说 512M内存
什么时候创建,什么时候回收
创建对象的时候retainCount = 1;只读的;引用计数器;记录有多少人用这个类,retainCount就是几;
如果没人用的时候retainCount就变成0了,如果变成0了,那么系统就回收
[p replease]通知系统减1
[p retain]给对象发送一个retain消息加1,一定是在引用计数器不为0的情况下加1
栈
int a =10;
Person * p = [[Person alloc] init];
[p retain];//引用计数+1 并且一定要在引用计数不为0的时候
//1
[p release];
//0
[p release];
一旦调用了delloc方法,就立刻销毁
当我们的引用计数指针为0的时候,我们的person对象被销毁了之后,再去用对象的指针调用方法,就会崩溃
使用已经被释放调用对象的指针操作对象的任何方法都会出现野指针错误
为了防止野指针错误
指针释放完毕时候把指针清零
p.age = 10;//[p setAge:10]
p = nil;//0
清零之后这个对象就没有了地址,当给一个为空的指针发送消息,就不会引发错误的,java跟c#的同学们注意一下
[nil reslese];在oc
僵尸对象
应用程序就是个死循环
1.当引用计数器为零的时候,会调用dealloc方法,通知对象将被销毁
2.调用对象的retain 方法会使对象引用计数+1,并且返回一个id,就是对象本身
3.调用对象的release 方法,会使对象的引用计数-1
4.指向了已经被释放掉的对象的指针成为野指针
5.使用野指针操作对象,会导致程序崩溃(野指针并不是空指针)
6.oc中没有空指针异常,给一个为空的指针(nil,NULL,0)发送消息,不会产生异常
7.如果一个对象你已经确定释放掉它了,那么最好给我赋值为nil。防止下面出现野指针的错误
8.dealloc方法中一定要调用[super dealloc],通知父类释放与当前相关属性
//配对概念,当你在同一个文件中使用alloc,new创建对象的时候,就一定要与之对应一个release
int main()
{
Student *s = [[Student alloc] init];
//s-0
[s release];//创建对象就一定要加一个
}
聚合关系 = 组合关系
1.
对象在内存中使用玩之后
拿iphone 4;来说 512M内存
什么时候创建,什么时候回收
创建对象的时候retainCount = 1;只读的;引用计数器;记录有多少人用这个类,retainCount就是几;
如果没人用的时候retainCount就变成0了,如果变成0了,那么系统就回收
[p replease]通知系统减1
[p retain]给对象发送一个retain消息加1,一定是在引用计数器不为0的情况下加1
栈
int a =10;
Person * p = [[Person alloc] init];
[p retain];//引用计数+1 并且一定要在引用计数不为0的时候
//1
[p release];
//0
[p release];
一旦调用了delloc方法,就立刻销毁
当我们的引用计数指针为0的时候,我们的person对象被销毁了之后,再去用对象的指针调用方法,就会崩溃
使用已经被释放调用对象的指针操作对象的任何方法都会出现野指针错误
为了防止野指针错误
指针释放完毕时候把指针清零
p.age = 10;//[p setAge:10]
p = nil;//0
清零之后这个对象就没有了地址,当给一个为空的指针发送消息,就不会引发错误的,java跟c#的同学们注意一下
[nil reslese];在oc
僵尸对象
应用程序就是个死循环
1.当引用计数器为零的时候,会调用dealloc方法,通知对象将被销毁
2.调用对象的retain 方法会使对象引用计数+1,并且返回一个id,就是对象本身
3.调用对象的release 方法,会使对象的引用计数-1
4.指向了已经被释放掉的对象的指针成为野指针
5.使用野指针操作对象,会导致程序崩溃(野指针并不是空指针)
6.oc中没有空指针异常,给一个为空的指针(nil,NULL,0)发送消息,不会产生异常
7.如果一个对象你已经确定释放掉它了,那么最好给我赋值为nil。防止下面出现野指针的错误
8.dealloc方法中一定要调用[super dealloc],通知父类释放与当前相关属性
//配对概念,当你在同一个文件中使用alloc,new创建对象的时候,就一定要与之对应一个release
int main()
{
Student *s = [[Student alloc] init];
//s-0
[s release];//创建对象就一定要加一个
}
聚合关系 = 组合关系
1.
相关文章推荐
- 黑马程序员——零基础学习iOS开发——11 OC内存管理
- 黑马程序员-----------ios培训 oc内存管理(一)
- 黑马程序员——IOS基础——OC内存管理
- 黑马程序员------ios培训 oc内存管理(二)
- 黑马程序员--ios基础--oc内存管理
- 黑马程序员—IOS加强视频—oc内存管理
- 黑马程序员——IOS基础——OC内存管理ARC
- 黑马程序员——IOS基础(OC内存管理)
- 黑马程序员_ios基础总结13_OCFoundation2
- 黑马程序员_iOS 的基础控件之深入UIButton、UIImageView
- 黑马程序员-IOS-C语言基础-流程控制
- 黑马程序员——IOS基础——OC面向对象四开发技巧
- 黑马程序员-IOS-C语言基础-其他数据类型及总结
- 黑马程序员_ios基础总结11_协议,代理
- 黑马程序员-IOS-C语言基础-复杂数据类型
- 黑马程序员_iOS 的基础控件之UIButton
- 黑马程序员_iOS 的高级控件之UIScrollView
- 黑马程序员-IOS-C语言基础-函数及内存剖析
- 黑马程序员_ios基础总结7_OC简介
- 黑马程序员_ios基础总结9_OC特有语法