• ARC下的内存管理机制


    (一)ARC的判断准则:

      只要没有强指针指向对象,对象就会被释放。

    (二)指针分类:

    (1)强指针:默认的情况下,所有的指针都是强指针,关键字strong

    (2)弱指针:_ _weak关键字修饰的指针

      声明一个弱指针如下:

      _ _weak Person *p;

      ARC中,只要弱指针指向的对象不在了,就直接把弱指针做清空操作。

      _ _weak Person *p=[[Person alloc]  init];//不合理,对象一创建出来就被释放掉,对象释放掉后,ARC把指针自动清零。

      ARC中在property处不再使用retain,而是使用strong,在dealloc中不需要再[super dealloc]。

      @property(nonatomic,strong)Dog *dog;// 意味着生成的成员变量_dog是一个强指针,相当于以前的retain。

      如果换成是弱指针,则换成weak,不需要加_ _。

     

    (三)ARC的特点总结:

    (1)不允许调用release,retain,retainCount 

    (2)不允许重写dealloc,但是不允许调用[super dealloc]

    (3)@property的参数:

      Strong:相当于原来的retain(适用于OC对象类型),成员变量是强指针

      Weak:相当于原来的assign,(适用于oc对象类型),成员变量是弱指针

      Assign:适用于非OC对象类型(基础类型)

    (四)补充

      让程序兼容ARC和非ARC部分。转变为非ARC  -fno-objc-arc  转变为ARC的, -f-objc-arc 。

      ARC也需要考虑循环引用问题:一端使用retain,另一端使用assign。

      030114208307448.png

      提示:字符串是特殊的对象,但不需要使用release手动释放,这种字符串对象默认就是autorelease的,不用额外的去管内存。

  • 相关阅读:
    【矩阵乘法优化dp】[Codeforces 621E] Wet Shark and Blocks
    【2016常州一中夏令营Day7】
    【2016常州一中夏令营Day6】
    【2016常州一中夏令营Day5】
    【2016常州一中夏令营Day4】
    【2016常州一中夏令营Day3】
    【2016常州一中夏令营Day2】
    Aiopr的中文意思
    Bloom filter
    redis4.0.2集群搭建
  • 原文地址:https://www.cnblogs.com/kongweiiwei/p/4622811.html
Copyright © 2020-2023  润新知