gpt4 book ai didi

ios - 类别中的属性

转载 作者:行者123 更新时间:2023-11-28 19:04:14 24 4
gpt4 key购买 nike

为什么允许在类及其访问器方法都未合成的情况下在类中声明属性?是否涉及任何性能开销?

分类纯粹是一种编译器技术吗?

我正在尝试了解类别的工作原理。 This只是解释该做什么和不该做什么。有没有更详细的资料来源?

编辑:我知道我可以使用关联的引用。那不是我要的。我想知道为什么属性没有合成?如果编译器综合它们,是否存在性能问题或安全问题?如果有,我想知道是什么以及如何?

最佳答案

Why is it allowed to declare properties in categories [...] ?

属性有很多方面(在编译和运行时)。

  1. 他们总是在类上声明一个或两个访问器方法。
  2. 他们可以在编译器将点符号转换为消息时更改选择器。
  3. 结合 @synthesize 指令(或默认情况下),它们可以使编译器合成访问器方法和可选的 ivars。
  4. 他们向运行时可用的类添加内省(introspection)信息。

当在类别(或协议(protocol))中声明属性并且合成不可用时,这些方面中的大多数仍然有用。

Is categorisation purely a compiler technique?

没有。类别作为属性,既有编译时间也有运行时方面。

例如,类别可以在以后从动态库中加载。所以可能已经有一个类的实例突然添加了新方法。这是类别无法添加 ivar 的原因之一,因为旧对象会缺少这些 ivar,以及运行时应如何判断对象是在添加类别之前还是之后创建的。

关于ios - 类别中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21900826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com