黑马程序员------ios培训 oc内存管理(二)

来源:互联网 发布:ubuntu下安装jdk 编辑:程序博客网 时间:2024/05/16 05:31


                                         ------<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






0 0