Ce test échouera:Pourquoi l'utilisation de la syntaxe à points invoque-t-elle le LHS de cette instruction deux fois?
#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
Si je remplace le [self get].name
avec [[self get] name]
, il passe. c'est-à-dire, en utilisant la syntaxe point, le LHS du '.' est évalué deux fois. Comment cela peut-il arriver?
Ah, merci :). Considérez-moi comme un converti à la pureté maintenant. Dans mon cas, le sélecteur appelait un service web - méchant. J'ai enregistré un bug avec apple (# 6729855), si cela vous intéresse. –