1) You misunderstood @synthesize a bit. @synthesize does nothing with the object. It only tells the compiler to generate getter and setter methods according to the parameters used in the @property declaration
// Synthesis of IBOutlets on iOS will make them be
// saved when they are created nib
outputs are not saved (outputs are only notifications for the interface constructor and do not affect the code), objects are saved when the setter generated by @ is synthesized. When the tip loads, the boot system calls your generated setter.
2) The decision on whether to use accessories in object C is no different from deciding on the use of access devices in any object-oriented language. It is a choice of style, need and reliability. The fact that the accessor acts as an IBOutlet does not matter.
But in the C lens, I would advise you NOT to use accessors in two places: dealloc and inside the var access method itself.
And if you use Accessors in init, then you need to be careful about your accounts.
self.myString = [[NSString alloc] initWithString:@"myString"];
This line is a memory leak. Using your accessory for copying saves the object, so you must let it go after creation.
3) Not sure what you mean by fussy. Perhaps the answer is 2)
4) See 2) and be careful in managing memory. If you call alloc / init, you are now responsible for freeing the object - this is completely independent of the save / releases used by accessories and dealloc.
5) No, you should not ignore other instance variables in viewDidUnload. It is expected that your controller will retain its state even if the view disappears. viewDidUnload is intended only for cleaning objects with potentially dangerous memory when the controller view is not currently displayed.
Consider a navigation controller. View controller 1 is on the stack, and then view controller 2 by clicking and is now visible. If the memory conditions decrease, the system may try to unload the view of controller 1 and then call viewDidUnload.
Then popping view controller 2 will not create the View 1 controller object again, but it will load the view of controller 1 and call viewDidLoad.
Re comments
2) That's for sure - you can use the convenience constructor or release it immediately after allocation / initialization and assignment or release before the block exits or automatically alerts. You mainly choose a style question (although some of them will argue with an abstract, but not me!)
3) There are accessors for scalars - you created some in your code
@property (readwrite) BOOL myBOOL;
This creates the myBOOL and setMyBOOL methods for your class.
Remember that there is nothing special about point notation. This is just a convenience, and when the code is compiled, myObject.property is exactly equivalent to [the myObject property], and myObject.property = x is exactly equivalent to [myObject setProperty: x]. Using dot notation is just a style choice.