Cocos2d何时保留对象?

时间:2012-06-24 17:44:12

标签: 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 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)时(是哪种方法)有没有经验法则?

再见,基督徒

2 个答案:

答案 0 :(得分:2)

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

    CCSprite *sprite = [CCSprite spriteWithFile:@"icon.png"];
    

    手动内存管理

    CCSprite *sprite = [[CCSprite alloc] initWithFile:@"icon.png"];
    

    不要让retainCount迷惑你。每行代码都可能保留对象。如果运行良好,底层代码将在完成后自动释放。

    必须键入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
    }
    

答案 1 :(得分:1)

The rule与任何其他Cocoa代码相同:在需要时保留一些内容。完成后释放它。

此外,retainCount方法is generally useless