方法之间丢失可变数组内容

时间:2011-09-04 23:25:40

标签: objective-c cocos2d-iphone

我的.m文件中有这个代码,这是一个Cocos 2D CCLayer类。我在init方法中初始化一个数组,然后尝试在nextFrame方法中使用此数组的内容。但是当调用nextFrame方法时,数组的内容似乎是空的。当我尝试获取第一个项目时,收到一条错误消息:

编程收到信号“EXC_BAD_ACCESS”

如何在nextFrame方法中成功访问此数组的内容?

NSMutableArray *cars;

-(id) init {
    cars = [NSMutableArray array];
    Car *car;
    car = [[Car alloc] init];
    [cars addObject:car];
    self.isTouchEnabled = YES;
}

- (void) nextFrame:(ccTime)dt {
    Car *car = [cars objectAtIndex:i]; // Program received signal "EXC_BAD_ACCESS" 
}

Car.h

#import <Foundation/Foundation.h>
#import "cocos2d.h";

@interface Car : NSObject {
    NSInteger type;
    CCSprite *sprite;
}

@property (readwrite, assign) NSInteger type;
@property (retain) CCSprite *sprite;

@end

Car.m

#import "Car.h"

@implementation Car

@synthesize type;
@synthesize sprite;

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void) dealloc {
    [sprite release];
    [super dealloc];
}

@end

1 个答案:

答案 0 :(得分:4)

您将[NSMutableArray array]的结果分配给实例变量。这是一个自动释放的对象,这实际上意味着它没有任何所有者,因此在当前的runloop迭代*之后可以随意消失。你需要保留它(或者只使用[[NSMutableArray alloc] init],它会返回你拥有的对象)。

* 基本上。您应该看到Cocoa memory mangement guide了解更多详情。它很短但充满了基本信息。