How do I replace weak references when using ARC and targeting iOS 4.0?

后端 未结 3 1164
有刺的猬
有刺的猬 2020-12-07 08:34

I\'ve begun developing my first iOS app with Xcode 4.2, and was targeting iOS 5.0 with a \"utility application\" template (the one that comes with a FlipsideViewController).

相关标签:
3条回答
  • 2020-12-07 08:54

    To target the older OS, you can use unsafe_unretained instead of weak in your property declaration, and it should mostly work the same way. weak references nil themselves when their target goes away, but unsafe_unretained leaves open the possibility that the object you're linking to could turn into a dangling pointer when it is deallocated. The latter is the same behavior as if you had used assign as a property declaration in manual memory management.

    You do this to avoid retain cycles, which I mention in my answer here. You don't want to have a strong pointer to something that might have a strong pointer back to the original object. Then nothing would get released properly.

    0 讨论(0)
  • 2020-12-07 08:59

    If only using weak references for additional safety, manually call the new runtime functions if they're available and fallback to simple assignment on __unsafe_unretained variables if not.

    ZWRCompatibility.h will simplify this somewhat.

    0 讨论(0)
  • 2020-12-07 09:11

    Thanks to Mike Ash's compatibility library PLWeakCompatibilty, you can now simply use __weak on iOS 4.x, as well.

    It's incredibly easy to configure and requires no additional consideration or effort over 5.x.

    0 讨论(0)
提交回复
热议问题