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 属性的内存管理特性

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

  • 可能碰到的iOS笔试面试题(6)--内存管理

    内存管理 ARC处理原理 ARC是Objective-C编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做...

  • iOS的内存管理

    Objective-C需要自己考虑内存管理,但是如果熟悉Objective-C的内存管理机制,手工管理内存其实也并...

  • 三、数据成员:属性与实例变量 @GeekBand

    类型成员 数据成员 描述对象状态 实例变量 类内访问 生存周期 特性 读写特性多线程特性内存管理特性 属性 描述类...

  • 内存管理

    内存管理ARC处理原理ARC是Objective-C编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做的只...

  • 4.内存管理

    内存管理ARC处理原理ARC是Objective-C编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做的只...

  • OC-属性简介

    OC中,任何属性都有3种特性,分别是 1.多线程特性2.读/写特性3.内存管理特性 多线程特性 多线程特性有non...

  • iOS 面试知识点(三)

    Objective-C的内存管理 引用计数机制 Objective-C 主要采用引用计数机制来管理对象的内存。 运...

  • Objective-C 内存管理规则

    2、Objective-C 内存管理规则 那么Objective-C是如何管理内存的?难么就不得不从Objecti...

  • Objective-C 属性特性

    @property 特性分为三类:原子性、存取器控制、内存管理。 原子性 atomic 指定属性的原...

网友评论

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

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