NSArray始终保持有效

时间:2012-04-02 10:23:12

标签: iphone objective-c cocoa

我有一个应用程序,在init方法上,我需要加载一个有很多背景的数组,并且这个数组在这个场景中保持有效,直到我离开它(并以dealloc发布)

在我的初学者中我有这个:

backgrounds=[ [NSArray alloc]  initWithObjects:BACK,BACK1,BACK2,BACK3,BACK4,BACK5,BACK6,BACK7,BACK8,BACK9, nil];

    int imageDelta=1;
    for (background in backgrounds)  
        {
            background.position=ccp(240*imageDelta,160);
            imageDelta=imageDelta+2;
            [self addChild:background ];
        }
     //release backgrounds here ????

现在,我的问题是,可以我和应该我现在发布backgrounds? 我仍然需要这个数组在代码期间有效。 看起来我并没有真正了解数组。

非常感谢。

3 个答案:

答案 0 :(得分:0)

不,因为背景没有被分配,所以你不需要关心它。

如果你没有明确地分配一个变量,它被标记为自动释放

答案 1 :(得分:0)

不,你不应该在init方法中释放那个背景数组,因为它是一个实例变量。你说它只能在dealloc中释放它是正确的,这就是你完成它的时候。

如果您在init方法中释放该背景数组,那么之后您将无法再次访问它,因为它将是一个已释放的实例。我认为你将背景数组作为实例变量的原因是因为你想再次访问它?

答案 2 :(得分:0)

如果你需要背景数组作为实例变量(你需要在对象生命周期中使用变量),所以你必须在dealoc中释放它。

如果只需要在init方法中使用背景数组,请将其更改为局部变量并使用:

NSArray *backgrounds = [NSArray initWithObjects:BACK,BACK1,BACK2,BACK3,BACK4,BACK5,BACK6,BACK7,BACK8,BACK9, nil];

所以你不必关心它,因为它是一个自动释放。