Cocoa Memory Management has the concept of "ownership", which is most concisely expressed in the rule: if you call new or alloc or send retain or copy to an object, you own the result and are responsible for sending release when you are done with it. Otherwise, you do not own it, and you should not send release .
Instance variables, basically by definition, contain objects that the instance owns. You need the objects to be valid for the life of the instance, so you create them using the method of granting ownership in init :
Now they need to be sent release when the instance is done with them; generally speaking, it will be in dealloc .
Getter methods do not return owner references. So it should be so; when your code, for example, asks for a label for the font color, it does not need this colored object. Or, if so, he should explicitly take responsibility by sending retain . Providing them with default ownership would create headaches at best, and possibly leaks.
It is established that [self.myProperty release] makes the static analyzer complain, because it is a violation of the concept of ownership. The object returned from [self myProperty] does not belong to the caller. The fact that he simply turned out to be the same object as an ivar belonging to the caller does not matter. (Actually, it may not be the same thing: a getter can return a copy of the object that it represents, for example. It can build a completely new value based on a group of Ivars. It is even possible that there is no ivar, it matches the getter.)
Since objects that do not belong should not be sent release , so the result of the getter result is incorrect.
There are other, practical reasons for not doing this (good enough, especially Justin to answer in a question suggested as a hoax), but that the analyzer complains about the reason.