Straight from Apple's official documentation:
There are several critical rules to follow when implementing an init... method that serves as a class’s sole initializer or, if there are multiple initializers, its designated initializer (described in “Multiple Initializers and the Designated Initializer”):
Always invoke the superclass (super) initializer first.
Check the object returned by the superclass. If it is nil, then initialization cannot proceed; return nil to the receiver.
When initializing instance variables that are references to objects, retain or copy the object as necessary (in memory-managed code).
After setting instance variables to valid initial values, return self unless:
It was necessary to return a substituted object, in which case release the freshly allocated object first (in memory-managed code).
A problem prevented initialization from succeeding, in which case return nil.
Concerning the second issue, you typically don't have to implement the accessor methods by hand, but in case you must or want, here's a useful reference: Explicit getters/setters for @properties (MRC)