Boucle for avec clause in

FloFlo Membre
08:10 modifié dans API AppKit #1
Bonjour,

Juste une petite question bête à  laquelle je ne trouve pas de réponse sur la doc Apple, si j'écrit un truc du style :

<br />for (id anObject in anOtherObject.objectCollection)<br />


Est-ce que les méthodes du protocole NSFastEnumeration se chargent de garder la référence de la collection ou est-ce que l'accesseur objectCollection est appellé à  chaque passage de boucle ?



Réponses

  • AliGatorAliGator Membre, Modérateur
    08:10 modifié #2
    Il est intelligent, il n'appelle le getter qu'une seule fois.
    #import &lt;Cocoa/Cocoa.h&gt;<br /><br /><br />@interface Toto : NSObject<br />{<br />	NSArray* tata;<br />}<br />@property(nonatomic, retain) NSArray* tata;<br />@end<br /><br />@implementation Toto<br />-(NSArray*)tata {<br />	NSLog(@&quot;Getter called&quot;);<br />	return tata;<br />}<br />-(void)setTata:(NSArray*)newVal {<br />	NSLog(@&quot;Setter called&quot;);<br />	[newVal retain];<br />	[tata release];<br />	tata = newVal;<br />}<br />@end<br /><br />int main(int argc, char *argv&#91;])<br />{<br />	NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];<br />	<br />	Toto* t = [[Toto alloc] init];<br />	t.tata = [NSArray arrayWithObjects:@&quot;1&quot;,@&quot;2&quot;,@&quot;3&quot;,nil];<br />	NSLog(@&quot;FastEnumeration start&quot;);<br />	for (id obj in t.tata) {<br />		NSLog(@&quot;obj = %@&quot;,obj);<br />	}<br />	NSLog(@&quot;FastEnumeration end&quot;);<br />	[t release];<br />	<br />	[pool release];<br /><br />	return 0;<br />}
    
    Console a écrit:
    2009-03-20 20:47:13.474 TestProject[28685:10b] Setter called
    2009-03-20 20:47:13.478 TestProject[28685:10b] FastEnumeration start
    2009-03-20 20:47:13.479 TestProject[28685:10b] Getter called
    2009-03-20 20:47:13.480 TestProject[28685:10b] obj = 1
    2009-03-20 20:47:13.481 TestProject[28685:10b] obj = 2
    2009-03-20 20:47:13.482 TestProject[28685:10b] obj = 3
    2009-03-20 20:47:13.482 TestProject[28685:10b] FastEnumeration end

  • FloFlo Membre
    08:10 modifié #3
    Merci bien !
Connectez-vous ou Inscrivez-vous pour répondre.