1. 内存泄露.
指的是1个对象没有被及时的回收.在该回收的时候而没有被回收
一直驻留在内存中,直到程序结束的时候才回收.
2. 单个对象的内存泄露的情况.
1). 有对象的创建,而没有对应的relase
2). retain的次数和relase的次数不匹配.
3). 在不适当的时候,为指针赋值为nil
4). 在方法中为传入的对象进行不适当的retain
3. 如何保证单个对象可以被回收
1). 有对象的创建 就必须要匹配1个relase
2). retain次数和release次数一定要匹配.
3). 只有在指针称为野指针的时候才赋值为nil
4). 在方法中布要随意的为传入的对象retain.
4.属性是OC对象的处理
1. 当属性是1个OC对象的时候. setter方法的写法.
将传进来的对象赋值给当前对象的属性,代表传入的对象多了1个人使用,所以我们应该先为这个传入的对象发送1条retain消息 再赋值.
当当前对象销毁的时候.代表属性指向的对象少1个人使用. 就应该在dealloc中relase
2. 当属性是1个OC对象的时候,setter方法照着上面那样写,其实还是有Bug的.
当为对象的这个属性多次赋值的时候.就会发生内存泄露.
发生泄露的原因: 当为属性赋值的时候, 代表旧对象少1个人用.新对象多1个人使用.
应该先判断一下,先判断一下属性的当前址是不是和要赋值的值是不是相等,如果不等再赋值,并对原来的值进行
release方法调用,对现在的值进行retain方法调用。
还要重写dealloc方法
- (void)setCar:(Car *)car
{
if(_car != car)
{
[_car release];
_car = [car retain];
}
}
还要重写dealloc方法.
- (void)dealloc
{
[_car release];
[super delloc];
}