我的.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
答案 0 :(得分:4)
您将[NSMutableArray array]
的结果分配给实例变量。这是一个自动释放的对象,这实际上意味着它没有任何所有者,因此在当前的runloop迭代*之后可以随意消失。你需要保留它(或者只使用[[NSMutableArray alloc] init]
,它会返回你拥有的对象)。
* 基本上。您应该看到Cocoa memory mangement guide了解更多详情。它很短但充满了基本信息。