------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
初学OC的内存管理,感觉相当麻烦,一直不理解,既然有简单的new方法,为什么非要给它拆成[类名 alloc] init]的方法,学过之后,才渐渐明白其中的奥秘,原来是这样啊!感觉OC实在的太高明了。
话不多说,下面跟我一起学习OC的内存管理:
学习笔记:
内存管理代码规范:
1.只要调用了alloc,必须有release(autorelease)
对象不是通过alloc产生的,就不需要release
2.set方法的代码规范
1> 基本数据类型:直接复制
- (void)setAge:(int)age
{
_age = age;
}
2> OC对象类型
- (void)setCar:(Car *)car
{
// 1.先判断是不是新传进来对象
if ( car != _car )
{
// 2.对旧对象做一次release
[_car release];
// 3.对新对象做一次retain
_car = [car retain];
}
}
3.dealloc方法的代码规范
1> 一定要[super dealloc],而且放到最后面
2> 对self(当前)所拥有的其他对象做一次release
- (void)dealloc
{
[_car release];
[super dealloc];
}
内存管理原则
(一)原则
只要还有人在使用某个对象,那么这个对象就不会被回收;
只要你想使用这个对象,那么就应该让这个对象的引用计数器+1;
当你不想使用这个对象时,应该让对象的引用计数器-1;
(二)谁创建,谁release
(1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法
(2)不是你创建的就不用你去负责
(三)谁retain,谁release
只要你调用了retain,无论这个对象时如何生成的,你都要调用release
(四)总结
有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1.
因为从Xcode5之后系统便默认采用ARC内存管理机制,所以这段内容我们了解就好,应该把精力放到思想上。
为学OC加油!相信自己!