为什么需要在NSInvocation-getArgument:atIndex:上保留__unsafe_unretain缓冲区?

mt81

我正在使用NSInvocation并且需要从中检索属性之一。

我正在使用以下代码,但是我有一些奇怪的行为调用[invocation invoke];

NSString *propertyName = nil;
[invocation getArgument:&propertyName atIndex:3];

我读到为了使其在ARC下工作,我们需要使用__unsafe_unretained

__unsafe_unretained NSString *propertyName = nil;
[invocation getArgument:&propertyName atIndex:3];

很好,很好!!但我想了解原因。谁能解释一下?

签名-[NSInvocation getArgument:atIndex:]IS

- (void)getArgument:(void *)buffer
        atIndex:(NSInteger)index

因此buffer是无类型的,不一定是对象。ARC的授权你使用一个非保留引用(因此未保留的部分),不保持引用的对象活着并能吊着(因此危险或不安全的),所以它必须是合格__unsafe_unretained,也看到了铿锵规范,你必须告诉ARC不要在意这块内存。

不再建议真正使用NSInvocation,它在ARC上不能很好地工作,并且在Swift中不可用。或者,您可以使用-[NSObject methodForSelector:]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们需要在Linux上挂载?

来自分类Dev

为什么ClassCleanup属性需要在静态方法上?

来自分类Dev

为什么我们需要在Linux上挂载?

来自分类Dev

为什么需要在实体类上放置@NamedQuery?

来自分类Dev

为什么我需要在资源上使用.close()

来自分类Dev

为什么代表应该是unsafe_unretain而不是弱者?

来自分类Dev

为什么代表应该是unsafe_unretain而不是弱者?

来自分类Dev

什么时候以及为什么我们需要在bash上使用“ wait”命令?

来自分类Dev

为什么在LZW压缩中压缩缓冲区需要大于输入缓冲区?

来自分类Dev

为什么需要在主成分分析中指出要保留的成分数?

来自分类Dev

杰克逊为什么我需要在子类上使用JsonTypeName批注

来自分类Dev

为什么要在每个文件上都需要所有模块?

来自分类Dev

为什么GCM要在4.0.4操作系统以下的设备上运行,需要Google帐户登录?

来自分类Dev

为什么Kafka docker需要在Unix套接字上侦听

来自分类Dev

为什么我需要在身体上附加表格

来自分类Dev

为什么有时需要在docker上运行nginx?

来自分类Dev

为什么我需要在此React方法上使用这些花括号

来自分类Dev

为什么我需要在按钮上单击两次以使事件发生?

来自分类Dev

为什么要在每个文件上都需要所有模块?

来自分类Dev

从数据仓库创建报表时,为什么需要在SQL上使用T-SQL?

来自分类Dev

为什么LC_MESSSAGES需要在macOS自制bash上导出才能生效?

来自分类Dev

为什么我需要在Windows bash上用winpty作为前缀openssl?

来自分类Dev

为什么需要在 xampp 控制面板上的 mysql 之前启动 apache

来自分类Dev

需要在主线程上执行什么

来自分类Dev

为什么XNA Write / ReadObject <Model>()不保留顶点/索引缓冲区数据?

来自分类Dev

为什么要在结构中保留内存?

来自分类Dev

为什么我需要在ngRepeat内指定$ parent但不能在与ngRepeat相同的元素上指定

来自分类Dev

为什么需要在套接字上定义两次端点才能开始接收数据?

来自分类Dev

为什么我需要在ngRepeat内指定$ parent但不能在与ngRepeat相同的元素上指定

Related 相关文章

  1. 1

    为什么我们需要在Linux上挂载?

  2. 2

    为什么ClassCleanup属性需要在静态方法上?

  3. 3

    为什么我们需要在Linux上挂载?

  4. 4

    为什么需要在实体类上放置@NamedQuery?

  5. 5

    为什么我需要在资源上使用.close()

  6. 6

    为什么代表应该是unsafe_unretain而不是弱者?

  7. 7

    为什么代表应该是unsafe_unretain而不是弱者?

  8. 8

    什么时候以及为什么我们需要在bash上使用“ wait”命令?

  9. 9

    为什么在LZW压缩中压缩缓冲区需要大于输入缓冲区?

  10. 10

    为什么需要在主成分分析中指出要保留的成分数?

  11. 11

    杰克逊为什么我需要在子类上使用JsonTypeName批注

  12. 12

    为什么要在每个文件上都需要所有模块?

  13. 13

    为什么GCM要在4.0.4操作系统以下的设备上运行,需要Google帐户登录?

  14. 14

    为什么Kafka docker需要在Unix套接字上侦听

  15. 15

    为什么我需要在身体上附加表格

  16. 16

    为什么有时需要在docker上运行nginx?

  17. 17

    为什么我需要在此React方法上使用这些花括号

  18. 18

    为什么我需要在按钮上单击两次以使事件发生?

  19. 19

    为什么要在每个文件上都需要所有模块?

  20. 20

    从数据仓库创建报表时,为什么需要在SQL上使用T-SQL?

  21. 21

    为什么LC_MESSSAGES需要在macOS自制bash上导出才能生效?

  22. 22

    为什么我需要在Windows bash上用winpty作为前缀openssl?

  23. 23

    为什么需要在 xampp 控制面板上的 mysql 之前启动 apache

  24. 24

    需要在主线程上执行什么

  25. 25

    为什么XNA Write / ReadObject <Model>()不保留顶点/索引缓冲区数据?

  26. 26

    为什么要在结构中保留内存?

  27. 27

    为什么我需要在ngRepeat内指定$ parent但不能在与ngRepeat相同的元素上指定

  28. 28

    为什么需要在套接字上定义两次端点才能开始接收数据?

  29. 29

    为什么我需要在ngRepeat内指定$ parent但不能在与ngRepeat相同的元素上指定

热门标签

归档