Этот тест не пройден:
#import "GTMSenTestCase.h"
@interface Person : NSObject
@property (readonly) NSString *name;
@end
@implementation Person
- (NSString *)name { return @"Nick"; }
@end
@interface TemplateUnitTest : GTMTestCase @end
@implementation TemplateUnitTest
static BOOL called = NO;
- (Person *)get {
if (called) { STFail(nil); }
called = YES;
return [[Person new] autorelease];
}
- (void)testPropertyMakesThingGetSentTwice {
NSString *s = [[self get].name stringByAppendingString:@"foo"];
STAssertEqualObjects(@"Nickfoo", s, nil);
}
@end
Если я заменим [self get].name
на [[self get] name]
, оно пройдет. то есть, используя точечный синтаксис, LHS '.' оценивается дважды. Как это произошло?