The entry [[self dataForTable] count] does not apply directly to iVar. There are some backstage stuff ...
If you use ivar in your code without yourself, this is direct access to ivar. If you use either [self someIvarName] or self.someIvarName, you are actually sending a message to the object (which itself). The runtime tries to resolve this message and will use one of several mechanisms: if you define a method with a comparable name, this method will be used if such a method (or property) does not exist, then the default encoding key will use the same named ivar.
As for exposure, this will vary depending on your code. For example, if your property is saved (as opposed to assigned), there is a very significant difference between:
someVar = nil
and
self.someVar = nil
The synthesized setter will correctly free someVar before setting it to nil, whereas in the first example you are now leaked into memory. This is just one example of a difference.
Darryl H. Thomas
source share