------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一.autorelease::
1.autorelease简单接受
1.>autorelease方法返回值是本身。
2.>调用autorelease方法后对象计数器不变
3>autorelease调用后会将对象放到一个自动释放池中
4>当能够自动释放池销毁时会对池子中所有的对象进行一次release
2.autorelease方法的好处
1>不再关心对象释放的时间
2>不用关心对象什么时候release
3.autorelease 方法使用的注意点
1>占用内存较大的对象不要随意使用autorelease
2>对占用内存较小的对象有影响 但影响不大
4.autoelease错误写法
1>对自动释放池中的对象有进行一次release
例:
autorelease{
Person *p = [[[Person alloc] init] autorelease];
[p release];
}
2>调用两次autorelease
autorelease{
Person *p = [[[[Person alloc] init] autorelease] autorelease];
}
5.自动释放池
1>在iOS程序中会创建无数个池子,这些池子都是以栈结构存在(先进后出)
2>当一个对象调用autorelease方法时会将这个对象放到栈顶的释放池
6.关于创建一些类方法
1.>系统中自带的方法里没有alloc 、new、copy说明返回的对象都是已经autorelease过了
2.>开发中经常会提供一些类方法,快速创建一个已经autorelease过的对象
例:
+ (id)person
{
return [[[self alloc] init ] autorelease];
}
+ (id)personWithAge:(int)age
{
Person *p = [[[self alloc] init ] autorelease];
p.age = age;
return p;
}
二.ARC
1.ARC是一种编译器特性
2.关于指针
1>强指针:默认情况下所有的指针都是强指针
2>弱指针:"_weak"标示的指针
3.ARC的判断准则:只要没有强指针指向对象就会释放对象
4.ARC特点
1>不允许调用release retain retainCount
2>允许重写dealloc但不允许调用 [super dealloc];
3>property参数
*strong 成员变量是强指针(适用于oc对象)
*weak 成员变量是弱指针
*assign 适用于非oc对象
5.关于循环引用的问题在ARC特型中的解决方法:一端用strong,一端用weak