Re: further confusion regarding the release of controls loaded from a nib
Re: further confusion regarding the release of controls loaded from a nib
- Subject: Re: further confusion regarding the release of controls loaded from a nib
- From: Eeyore <email@hidden>
- Date: Tue, 20 Mar 2012 14:09:09 -0700
The material quoted is post-ARC usage (not the use of "weak" and not "assign").
In the legacy paradigm material, you will see that pre-ARC. You can choose "retain" or "assign" (or "copy", but I'll leave that out here). iOS outlets should be held as "retain", and therefore need to be nil-ed in viewDidUnload (so that they can be released in low memory situations) and released in dealloc (or they will leak). You probably don't want to use "assign" because then if your view unloads, your outlets will be pointing at garbage until your view is reloaded.
In iOS 4 ARC, the choices are "strong" (retain equivalent), "unsafe_unretained" (assign equivalent). Here, outlets should be "strong" but you will no longer need to call release in dealloc since ARC handles that. You will need to nil them in viewDidUnload (so that they can be released in low memory situations). You probably wouldn't want to use "unsafe_unretained" for the same reasons as above.
In iOS 5 ARC, you can also use "weak". "Weak" acts like "assign" except that the references will be automatically nil-ed when the object is released. Here, outlets should be "weak." So when your view gets unloaded, your outlets will get deallocated (as you aren't holding on to them with strong), but ARC will magically nil your outlets so there is no chance that you will try access a zombie.
Aaron
On Mar 20, 2012, at 1:49 PM, G S wrote:
> The Apple doc for iOS says:
> "From a practical perspective, in iOS and OS X outlets should be defined as declared properties. Outlets should generally be weak, except for those from File’s Owner to top-level objects in a nib file (or, in iOS, a storyboard scene) which should be strong. Outlets that you create should will therefore typically be weak by default because:
> Outlets that you create to, for example, subviews of a view controller’s view or a window controller’s window, are arbitrary references between objects that do not imply ownership."
>
> This just adds more confusion. If the properties for the majority of IBOutlets are weak (since they're usually all going to be owned by the UIViewController's view), why would we release them in dealloc? That seems like an error. And setting them all to nil in viewDidUnload wouldn't seem to have any effect, other than simply being good practice for safety.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden