有条件的alloc / dealloc? [Objective-c和Cocos2D]

时间:2011-06-28 14:41:17

标签: objective-c conditional release dealloc alloc

如果我想在另一个内部分配一个类并且我想轻松引用它,但有时这个类不需要被分配,因此不会被释放。这是怎么做到的?我可以在dealloc中放置一个条件,这样它就不必被释放了吗?

更详细地说,我正在使用Cocos2D。我有可能需要或可能不需要分配的球员能力等级。在我的初学者:

    // Abilities
    if(abilityRushH == 0){
        objects = [theMap objectGroupNamed:@"oj"];
        startPoint = [objects objectNamed:@"item_ability_rushH"];
        x = [[startPoint valueForKey:@"x"] intValue];
        y = [[startPoint valueForKey:@"y"] intValue];

        rushH = [[RushHorizontal alloc] init];

        [self addChild:rushH.rushHSpriteSheet];

        rushH.rushHSprite.position = ccp(x,y);              
    }

    if(abilityRushV == 0){
        objects = [theMap objectGroupNamed:@"oj"];
        startPoint = [objects objectNamed:@"item_ability_rushV"];
        x = [[startPoint valueForKey:@"x"] intValue];
        y = [[startPoint valueForKey:@"y"] intValue];

        rushV = [[RushVertical alloc] init];

        [self addChild:rushV.rushVSpriteSheet];

        rushV.rushVSprite.position = ccp(x,y);  
    }

Cocos2D需要保留引用,以便它可以使用地图滚动。但如果我没有分配它,我怎么不dealloc?

2 个答案:

答案 0 :(得分:3)

由于您正在讨论在dealloc中发布它,因此会有一个实例变量。现在,当分配了Objective-C类的任何实例时,其所有对象都是nil,并且c类型被设置为0(或等效值)。因此,如果未实例化类的对象,则不需要付出额外的努力,因为实例变量在nil处为dealloc,因此发送给它的release消息将没有效果。

答案 1 :(得分:0)

确保可选变量在不需要时为nil,并在dealloc'ing之前进行nil检查。