【问题标题】:Objective-C - Should we use strong, weak or assign for Class-type?Objective-C - 我们应该为类类型使用强、弱还是赋值?
【发布时间】:2018-06-08 10:30:50
【问题描述】:

我知道我们应该对 Obj-C 对象属性/ivars 使用强/弱。但我发现我可以将 strong 用于 Class-type properties/ivars。

@property (nonatomic, strong) Class testClass;

代码不会导致构建错误。为什么?我们应该使用strong还是assign?

【问题讨论】:

  • 实际上,testClass 也是一个对象,但它永远不会被释放,所以使用 strong/weak/assign 也没关系。他们给出了相同的结果。

标签: objective-c class


【解决方案1】:

根据The Secret Life of Classes

类对象不是实例,但绝对是成熟的对象

你不需要做任何事情来创建一个类对象。程序启动时会自动为您的程序定义的每个类创建一个类对象。

当然,您可以将strong 用于对象。

什么时候释放类对象? - 简单的答案是程序何时结束。

没有理由关心程序运行时永远不会释放的对象的保留计数。这意味着不管你使用strong/weak/assign,这个对象在程序完成之前仍然不会被销毁。

所以你可以使用任何你想要的东西,它们会给出相同的结果。

【讨论】:

  • 一个类对象实际上从未被释放;类对象上没有清理或任何其他类型的“生命周期结束”触发器。程序完成时发生的收获是程序本身的外部。在某些(许多)情况下,当应用程序被用户或操作系统终止时,甚至不会调用 at-exit 挂钩。
  • 我个人认为这个答案是个坏建议。它依赖于实现细节。我会像对待任何其他人一样对待财产。使用strong 表示您希望在需要时安全地保留该值。使用weak 表示如果该值消失是可以的(即使在这种特殊情况下实际上不能)。根据属性的使用方式声明属性,而不是基于属性数据类型背后的一些可能的实现细节。
  • “类对象不是实例” 每个对象都是某事物的实例。类对象是元类的一个实例。
猜你喜欢
  • 2010-10-05
  • 2013-02-03
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
相关资源
最近更新 更多