To judge if it's safe to ignore the recommendation you have to understand why this recommendation exists.
The main problem are getters and setters that have side effects because they perform calculations based on instance variables that may not be initialized when you call the setter (or the getter).
Take the following code as example:
- (id)init {
self = [super init];
if (self) {
// don't do this
self.textColor = [UIColor blackColor];
self.font = [UIFont boldSystemFontOfSize:17];
// do this:
_textColor = [UIColor blackColor];
_font = [UIFont boldSystemFontOfSize:17];
[self createLayers];
}
return self;
}
- (void)setFont:(UIFont *)font {
if (font) {
_font = font;
[self createLayers];
}
}
- (void)setTextColor:(UIColor *)textColor {
if (textColor) {
_textColor = textColor;
[self createLayers];
}
}
- (void)createLayers {
// calculation that will crash if font or textColor is not set
}
Because createLayers crashes if textColor or font is nil, using the setter in init will crash your code.