【问题标题】:Property Attributes属性属性
【发布时间】:2012-07-19 05:28:02
【问题描述】:

当子类化时,我倾向于为我的所有属性赋予属性(非原子的,强的),除了 IBOutlet,当不是 nib 中的顶级对象时,它们是(非原子的,弱)。

在某些情况下,这样的习惯可能是不安全的,并会创建保留循环或产生其他此类负面影响?

谢谢。

【问题讨论】:

  • 这个问题可能没有答案——我想不出任何东西。当然,如果您有代表,他们也应该很弱。让 ARC 完成所有繁重的工作:-)
  • 谢谢你,这让人放心。

标签: ios properties attributes subclass


【解决方案1】:

对于 NSStrings,您应该使用(非原子,复制)。

【讨论】:

  • 你会知道为什么吗?
  • 好建议!问题是这样的——如果字符串是可变的,则实际上是复制了字符串——你会得到另一个字符串。但是如果字符串是不可变的——即一个普通的字符串——那么它就被保留了。我给这个向上箭头!很好地提醒我们所有人(我自己忘记了,即使知道多年后)。
  • 感谢@DavidH 的解释
  • 亲爱的 Vibhor,如果你喜欢这个,那么也给 hkcktk 打个招呼(即点击向上箭头)我知道你是这里的新手,但是帮助你的人需要获得积分奖励:- )
【解决方案2】:

是的,这个习惯可能是不安全的,因为你似乎并没有真正遵循属性属性赋予的规则。

正确的做法是考虑如何使用该属性并为其赋予相应的属性。

这可能出错的一些情况是:

  • 代表:保留周期。
  • 内存管理:在 2 个类之间共享的图像无法再使用,您必须在两个类上都将其设为 nil。
  • threads:将被多个线程访问的属性。

为您提供的快速指南:

如果该属性主要属于该类,即使该类可能共享它:strong 该类需要该属性才能工作:强(但当您不再需要指针时不要忘记将指针归零) 如果此属性属于另一个类:弱 代表:弱 IBOutlets:弱

对于并发属性,您通常可以使用非原子属性,除非您知道该属性可能被多个线程使用,然后将其设置为原子属性。

这只是一个非常模糊的指南,但在 ARC 下对我来说非常有用。

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 2010-09-17
    • 1970-01-01
    • 2018-08-18
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多