zoukankan      html  css  js  c++  java
  • iOS开发ARC机制下的内存管理技术要点

    转载一篇: iOS开发ARC内存管理技术要点ARC内存管理原则总结iOS ARC内存管理总结

    ARC内存管理机制

    (一)ARC的判断准则:

    只要没有任何一个强指针指向该对象,该对象就会被释放。

    (二)指针分类:

    (1)强指针:强指针使用关键字__strong修饰,默认的情况下,所有的指针都是强指针,即不加__strong,该指针变量就是强指针

    (2)弱指针:弱指针则由__weak关键字显式地修饰

    声明一个弱指针:__weak Person *p;

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

    __weak Person *p=[[Person alloc]  init];

    上面的代码存在问题:对象一被创建出来,就被立即释放掉了,这是因为该对象被创建出来后,没有被任何强指针所指着,ARC就立即把对象释放掉,并且ARC还自动把指针p清零

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

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

    如果想生成的成员变量_dog是一个弱指针,则把strong换成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。

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

     

  • 相关阅读:
    缓存
    json集合取值
    四个div块点击某个突出显示
    table获取某一列的td
    鼠标悬浮tr追加背景颜色
    jquery弹出层
    面试题
    表单校验及正则表达式
    jquery操作DOM
    jquery的事件与动画
  • 原文地址:https://www.cnblogs.com/hello-Huashan/p/4844705.html
Copyright © 2011-2022 走看看