您的位置:首页 > 职场人生

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  黑马程序员