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 (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to