Does an IBOutlet needs to be a property & synthesized?

interface-builder, iphone

Solution

On Mac OS X, IBOutlets are connected like this:

- Look for a method called set<OutletName>:. If it exists call it.

- If no method exists, look for an instance variable named <OutletName>, set it without retaining.

On iPhone OS, IBOutlets are connected like this:

- call [object setValue:outletValue forKey:@"<OutletName>"]

The behavior of set value for key is to do something like this:

- Look for a method called set<OutletName>:. If it exists call it.

- If no method exists, look for an instance variable named <OutletName>, set it and retain it.

If you use a property, you'll fall into the "Look for a method called set<OutletName>:..." case on both platforms. If you just use an instance variable, then you'll have different retain/release behavior on Mac OS X VS iPhone OS. There's nothing wrong with using an instance variable, you just need to deal with this difference in behavior as you switch between platforms.

Here's a link to full documentation on just this topic. https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW6

Problem

In most examples I see the following setup of IBOutlets: ``` (Example A) FooController.h: @interface FooController : UIViewController { UILabel *fooLabel; } @property (nonatomic, retain) IBOutlet UILabel *fooLabel; @end FooController.m: @implementation FooController @synthesize fooLabel; @end ``` But this works also fine (notice: no property and no synthesize): ``` (Example B) FooController.h: @interface FooController : UIViewController { IBOutlet UILabel *fooLabel; } @end FooController.m: @implementation FooController @end ``` Are there any downsides of defining IBOutlets as in Example B? Like memory leaks? Seems to work fine and I prefer to not expose the IBOutlets as public properties as they are not used as such, they are only used in the controller implementation. Defining it in three places without a real need does not strike me as very DRY (Don't Repeat Yourself).

Original source

Related problems