ARC下引用类型及限定符

1.引用类型

ARC 带 来 了 新 的 引 用 类 型: 弱 引 用。 深 入 理 解 这 些 引 用 类 型 对 内 存 管 理 非 常 重 要。 支 持 的 类 型 包 括 以 下 两 种。

  • 强 引 用
    强 引 用 是 默 认 的 引 用 类 型。 被 强 引 用 指 向 的 内 存 不 会 被 释 放。 强 引 用 会 对 引 用 计 数 加 1, 从 而 扩 展 对 象 的 生 命 周 期。
  • 弱 引 用
    弱 引 用 是 一 种 特 殊 的 引 用 类 型。 它 不 会 增 加 引 用 计 数, 因 而 不 会 扩 展 对 象 的 生 命 周 期。 在 启 用 了 ARC 的 Objective-C 编 程 中, 弱 引 用 格 外 重 要。

2.变 量 限 定 符

ARC 为 变 量 供 了 四 种 生 命 周 期 限 定 符。

  • __strong
    这 是 默 认 的 限 定 符, 无 需 显 示 引 入。 只 要 有 强 引 用 指 向, 对 象 就 会 长 时 间 驻 留 在 内 存 中。 可 以 将 __strong 理 解 为 retain 调 用 的 ARC 版 本。
  • __weak
    这 表 明 引 用 不 会 保 持 被 引 用 对 象 的 存 活。 当 没 有 强 引 用 指 向 对 象 时, 弱 引 用 会 被 置 为 nil。 可 将 __weak 看 作 是 assign 操 作 符 的 ARC 版 本, 只 是 对 象 被 回 收 时,__weak 具 有 安 全 性—— 指 针 将 自 动 被 设 置 为 nil。
  • __unsafe_unretained
    与 __weak 类 似, 只 是 当 没 有 强 引 用 指 向 对 象 时,__unsafe_unretained 不 会 被 置 为 nil。 可 将 其 看 作 assign 操 作 符 的 ARC 版 本。
  • __autoreleasing
    __autoreleasing 用 于 由 引 用 使 用 id * 传 递 的 消 息 参 数。 它 预 期 了 autorelease 方 法 会 在 传 递 参 数 的 方 法 中 被 调 用。

下面的代 码 展 示 了 限 定 符 的 使 用:

Person * __strong p1 = [[ Person alloc] init]; 
Person * __weak p2 = [[ Person alloc] init]; 
Person * __unsafe_unretained p3 = [[ Person alloc] init]; 
Person * __autoreleasing p4 = [[ Person alloc] init];

3.属 性 限 定 符

属 性 声 明 有 两 个 新 的 持 有 关 系 限 定 符: strong 和 weak。 此 外, assign 限 定 符 的 语 义 也 被 更 新 了。 一 言 以 蔽 之, 现 在 共 有 六 个 限 定 符。

下面的代 码 展 示 了 变 量 限 定 符 的 使 用:

@property (nonatomic, strong) IBOutlet UILabel *titleView; 
@property (nonatomic, weak) id < UIApplicationDelegate > appDelegate; 
@property (nonatomic, assign) BOOL selected; 
@property (nonatomic, copy) NSString *name; @property (nonatomic, retain) HPPhoto *photo; 
@property (nonatomic, unsafe_unretained) UIView *danglingReference;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Story51314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值