2012-07-19 325 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