Objective-C 属性的内存管理特性

作者: d30d9e0626b0 | 来源:发表于2015-08-20 22:38 被阅读130次

    当对象没有拥有者时,指针变量的内存就该被释放。故 ARC 就是为了解决什么时候释放内存的问题。对应的就是引用计数为零时。

    ARC:

    • strong:指针变量指向对象后,相应的对象多一个拥有者,引用计数加一。默认值,但通常会写出来。
    • weak :指针变量指向对象后,相应的对象拥有者个数不变,引用计数不变。相对 strong,避免循环引用问题。
    • copy :属性指向的对象有可能修改的子类, 如 NSMutableString/NSMutbaleArray,这时使用 copy,引用计数为一。
    • unsafe_unretained:与 weak 类似,但不会指针自动设置为 nil,适合非对象属性,不需要做内存管理,如 int,也是其默认值可不写。

    ARC 四个特性的典型用法:

    //
    //  GWItem.h
    //  RandomItems
    //
    //  Created by Will Ge on 7/23/15.
    //  Copyright © 2015 gewill.org. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface GWItem : NSObject
    
    
        @property (nonatomic, copy) NSString *itemName;
        @property (nonatomic, copy) NSString *serialNumber;
        @property (nonatomic) int valueInDollars;
        @property (nonatomic, readonly, strong) NSDate *dateCreated;
        
        @property (nonatomic, strong) GWItem *containedItem;
        @property (nonatomic, weak) GWItem *container;
    
    
    + (instancetype)randomItem;
    
    // GWItem 类的指定初始化方法
    - (instancetype)initWithItemName:(NSString *)name
                      valueInDollars:(int)value
                        serialNumber:(NSString *)sNumber;
    
    - (instancetype)initWithItemName:(NSString *)name;
    
    
    
    @end
    

    非 ARC:

    • assign:使用基本数据类型,如 int,float,与 unsafe_unretained 类似
    • retain:非 ARC 版本 strong

    参考:

    相关文章

      网友评论

        本文标题:Objective-C 属性的内存管理特性

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