私は次のものを持っているとしましょう:
@interface MyClass : NSObject { NSString* _foobar; }
@property (nonatomic, retain) NSString* foobar;
@end
@implementation MyClass
@dynamic foobar;
- (void) setFoobar:(NSString*)fbSet; { [_foobar release]; _foobar = [fbSet retain]; }
- (NSString*) foobar; { return _foobar; }
@end
それで:
MyClass* mcInst = [[[MyClass alloc] init] autorelease];
NSLog(@"I set 'foobar' to '%@'", (mcInst.foobar = @"BAZ!"));
の戻り値を見ると、割り当てが何も返さないように見えるため、-[MyClass setFoobar:]
この行が を出力すると仮定するかもしれません。I set 'foobar' to ''
ただし、ありがたいことに、この割り当ては期待どおりに機能し、コードはI set 'foobar' to 'BAZ!'
. 残念ながら、呼び出されたセッターの戻り値は、割り当てがそれに割り当てられた値を返すという事実に反するため、これは矛盾しているように感じます。最初mcInst.foobar = @"BAZ!";
は、ブロックの代わりに 2 つの呼び出しを行っていると考えました。最初はセッター、次に戻り値を収集するためのゲッターです。ただし、setter メソッドと getter メソッドをNSLog
呼び出しでインストルメント化すると、そうではないことが証明されます。