2012-07-19 135 views
0

当继承子类时,我倾向于为我的所有属性提供除IBOutlet外的属性(非原子性,强大),当非顶级对象存在于nib中时,它们是(非原子性的,弱)。属性属性

有没有这样的习惯可能是不安全的,并创建保留循环或有其他类似的负面影响?

谢谢。

+0

这可能没有答案 - 我无法想到任何东西。当然,如果你有代表,他们也应该很弱。让ARC完成所有繁重的工作:-) – 2012-07-19 23:46:18

+0

谢谢,这很让人放心。 – ratsimihah 2012-07-20 00:00:39

回答

1

是的,这种习惯可能是不安全的,因为你不认为遵循属性属性给定的规则。

做到这一点的正确方法是考虑如何使用该属性并给予相应的属性。

在此可能出现的问题的一些情况是:

  • 代表:保留周期。
  • 内存管理:在两个类之间共享的映像可能不再被使用,您将不得不在两者都使用它。
  • 线程:将被多个线程访问的属性。

一个非常快速指南为您提供:

如果属性主要属于类,即使类可能分享:强 类需要属性的工作:强(但不要忘了零指针如果这个属性属于另一个类,当你不再需要它) :弱 代表:弱 IBOutlets:弱

对于并发属性通常你会好起来的与非原子,除非你知道这个属性可以被多个线程使用,然后设置我像原子一样。

这只是一个非常模糊的指南,但在ARC下为我工作得非常好。

1

对于NSStrings你应该使用(nonatomic,copy)。

+0

你会碰巧知道为什么吗? – ratsimihah 2012-07-20 00:00:49

+1

好的建议!问题是这个 - 如果字符串是可变的,字符串实际上被复制 - 你会得到另一个字符串。但是如果字符串是不可变的 - 也就是普通的字符串 - 那么它就保留了。我给这个向上的箭头!很好地提醒我们所有人(即使经过多年的了解,我自己也会忘记这么做)。 – 2012-07-20 00:22:42

+0

感谢您的解释@DavidH – 2012-07-20 00:27:38