Содержимое изменяемого массива теряется между методами - PullRequest
1 голос
/ 05 сентября 2011

У меня есть этот код в моем файле .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 Ответ

4 голосов
/ 05 сентября 2011

Вы присваиваете результат [NSMutableArray array] переменной экземпляра.Это объект с автоматическим выпуском, что означает, что у него нет владельцев, и поэтому он может свободно уходить после текущей итерации цикла выполнения *.Вы должны сохранить его, если хотите, чтобы он оставался (или просто использовал [[NSMutableArray alloc] init], который возвращает принадлежащий вам объект).

* В основном .Вы должны увидеть Руководство по управлению памятью Какао для более подробной информации.Это довольно короткий, но полный важной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...