美文网首页
iOS - 内存管理

iOS - 内存管理

作者: iOS_愛OS | 来源:发表于2018-08-29 22:14 被阅读8次

    《Objective-c 高级编程 iOS 与 OSX 多线程和内存管理》 读书笔记

    书籍地址: 链接: https://pan.baidu.com/s/1JiQjmv7Hf8IPhKIA8v-2kQ 密码: 7awy


    __strong
    __weak
    __unsafe_unretained
    __autoreleasing

    • 只有在 ARC 有效时才有用
    • 涉及到作用域,出了作用域自动销毁

    初始化自动为nil;
    如:

    id __strong obj0;
    id __weak obj1;
    id __autoreleasing obj2;
    
    等同于 
    id __strong obj0 = nil;
    id __weak obj1 = nil;
    id __autoreleasing obj2 = nil;
    

    • __weak

      • 为什么要有 __weak?

      __strong 会造成循环引用, 用__weak 打破循环引用。
      修饰的对象会自动置nil
      iOS 4.0 之后才可以使用

    • __unsafe_unretained

      不属于编译器管理对象
      对象释放后,还会指向对象的地址(会造成奔溃,要手动置nil)
      职责同 __week 用来打破循环引用

    • __autoreleasing

      • ARC 无效时
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
      id obj = [[NSObject alloc] init];
      [obj autorelease];
      [pool drain];
      
      • ARC 有效时
      @autoreleasepool {
          id __autoreleasing obj = [[NSObject alloc] init];
      }
      
      • __autoreleasing 一般都是隐形使用
        1. 当方法名 不是以 alloc/new/copy/mutableCopy开始
          编译器会自动把返回值的对象注册到 autoreleasePool 中
          如:NSMutableArray *arr = [NSMutableArray array];
        2. __weak 修饰的变量,会被注册到 autoreleasePool 中
        3. 对象的指针会自动加上 __autoreleaseing 修饰符
          如: NSObject **obj 相当于 NSObject * __autoreleaseing

    ARC 规则

    • 不能使用 retain/release/retainCount/autorelease
    • 不能使用 NSAllocateObject/NSDeallocateObject
    • 必须最受嫩村管理的方法命名规则
    • 不要显示调用 dealloc
    • 使用 @autoreleasepol 块 替换 NSAutoreleasePool
    • 不能使用区域 NSZone
    • 对象变量不能作为 C 语言结构体 sturct/union 成员
    • 显示转换 id 和 void

    __bridge 相当于 __unsage_unretained
    __bridge_retained 相当于 retain 相当于 CGBridgingRetain
    __bridge_transfer 会自动释放被转换的对象同时强引用给被赋值的对象 相当于 CGBridgingRelease


    属性修饰词

    - assign                    __unsafe_unreatained
    - copy                      __strong
    - retain                    __strong
    - strong                    __strong
    - unsafe_unreatained        __unsafe_unreatained
    - weak                      __weak

    相关文章

      网友评论

          本文标题:iOS - 内存管理

          本文链接:https://www.haomeiwen.com/subject/vxllwftx.html