Objective c Cocos2d何时保留对象?

Objective c Cocos2d何时保留对象?,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,查看以下代码: CCSprite* testsprite = [CCSprite spriteWithFile:@"test.png"]; CCLOG(@"1. count: %d", [testsprite retainCount]); [self addChild:testsprite]; CCLOG(@"2. count: %d", [testsprite retainCount]); [testsprite runAction: [CCMoveTo

查看以下代码:

    CCSprite* testsprite = [CCSprite spriteWithFile:@"test.png"];
    CCLOG(@"1. count: %d", [testsprite retainCount]);
    [self addChild:testsprite];
    CCLOG(@"2. count: %d", [testsprite retainCount]);
    [testsprite runAction: [CCMoveTo actionWithDuration:3.0 position:CGPointMake(200.0, 200.0)]];
    CCLOG(@"3. count: %d", [testsprite retainCount]);
此代码的输出为:

1. count: 1
2. count: 2
3. count: 3
我想我明白这里发生了什么。问题如下:当(在哪些方法中)Cocos2D保留对象时(在本例中为testsprite),是否有经验法则

再见,Christian与任何其他Cocoa代码一样:当你需要保留一些东西时,保留它。完成后释放它

还有,
retainCount
方法

  • 如果可能,请使用类函数,因为它们是自动释放的
  • 使用addChild添加CCNode将保留该节点。如果您做了一些alloc init的东西,那么在将其作为子项添加后将其释放
  • 向数组中添加任何内容都会保留该对象。如果将对象添加到数组中,则可以安全释放该对象
  • 自动释放:

    CCSprite *sprite = [CCSprite spriteWithFile:@"icon.png"];
    
    手动内存管理

    CCSprite *sprite = [[CCSprite alloc] initWithFile:@"icon.png"];
    
    不要让重新计算使你困惑。每行代码都可能保留该对象。如果做得好,底层代码将在完成后自动释放它

    必须键入release时的常见示例

    NSMutableArray *units = [NSMutableArray array];
    for (int i = 0; i < 42; i++)
    {
        CCNode *unit = [[MyUnit alloc] init]; // retain +1
        [units addObject:unit]; // retain +1
        [unit release]; // retain -1
    }
    
    NSMutableArray*单位=[NSMutableArray];
    对于(int i=0;i<42;i++)
    {
    CCNode*unit=[[MyUnit alloc]init];//保留+1
    [units addObject:unit];//保留+1
    [单元释放];//保留-1
    }
    
    谢谢您的回复。还有一个问题:如果——在您的最后一个代码片段中——我稍后会调用[units release],这将释放该数组以及分配给该数组的所有对象(CCNodes)?是的,如果您释放该数组,它将释放其全部内容。所有MyUnits在[units release]之后被解除分配;不要为自己担心。获取对象时保留它,完成后释放它。如果每个人都做好自己的工作,就不会有问题了。