 <p>with 3.x ... use the name property of CCNode to your advantage.</p> <pre><code>-(void)createNewCactus { CCSprite *newCactus = [CCSprite spriteWithImageNamed:@"cactusclipart.png"]; [newCactus setScale:0.25]; newCactus.name = @"cactusclipart.png"; if (cactiCount &lt;= 21) { cactiCount++; if (cactiCount &lt; 7) [newCactus setPosition:ccp(43*cactiCount, 140)]; else if (cactiCount &lt; 13) [newCactus setPosition:ccp(43*cactiCount-258, 90)]; else [newCactus setPosition:ccp(43*cactiCount-516, 40)]; [self addChild:newCactus]; } else { [newCactus removeFromParentAndCleanup:YES]; // &lt;- this will never happen } } </code></pre> <p>and to remove do something like :</p> <pre><code>CCSprite *cac; while (cac = [self getChildByName:@"cactusclipart.png" recursively:NO]) { [cac revoveFromParentAndCleanup:YES]; } </code></pre>