Perhaps this isn’t news. Perhaps it doesn’t matter because you’ve provided public accessors. But here are the results anyway.
#import <Foundation/Foundation.h> @interface A: NSObject @property (nonatomic, assign) int a; @end @interface B: A - (int)differentGetter; @end @interface C: NSObject @property (nonatomic, retain) A *anA; - (int)aFromA; @end int main(int argc, char *argv[]) { @autoreleasepool { B *b = [[B alloc] init]; b.a = 3; NSLog(@"[b differentGetter] = %d", [b differentGetter]); [b release]; C *c = [[C alloc] init]; c.anA = [[A alloc] init]; c.anA.a = 4; NSLog(@"[c aFromA] = %d", [c aFromA]); [c release]; } return 0; } @implementation A @synthesize a=_a; @end @implementation B - (int)differentGetter { return _a; } // must be at least @protected @end @implementation C @synthesize anA = _anA; - (int)aFromA { return _anA->_a; } // must be @public - (void)dealloc { self.anA = nil; [super dealloc]; } @end
Doesn’t compile:
Untitled.m:37:33: error: instance variable '_a' is private - (int)differentGetter { return _a; } ^ Untitled.m:42:30: error: instance variable '_a' is private - (int)aFromA { return _anA->_a; } ^ 2 errors generated.