Совместное использование содержимого NSArray между несколькими методами в одном классе - PullRequest
2 голосов
/ 30 августа 2009

Что я делаю не так? Мой код падает, когда я пытаюсь войти в массив. Вот мой класс:

@interface ArrayTestAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    NSArray *array;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) NSArray *array;

-(IBAction)buttonPressed;

@end

@implementation ArrayTestAppDelegate

@synthesize window, array;


- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    array = [NSArray arrayWithObjects:@"Banana", @"Apple", @"Orange", @"Pear", @"Plum", nil];

    [window makeKeyAndVisible];
}

-(IBAction)buttonPressed {

    NSLog(@"%@", array);

}


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


@end

1 Ответ

5 голосов
/ 30 августа 2009

Это распространенная ошибка управления памятью в Какао. Метод arrayWithObjects класса NSArray возвращает объект автоматического освобождения. К тому времени, когда вы пытаетесь записать массив в метод buttonPressed, массив уже освобожден, и вы получаете сбой. Исправить несложно:

array = [[NSArray alloc] initWithObjects:@"Banana", @"Plum", nil];

Или:

array = [[NSArray arrayWithObjects:@"Banana", @"Plum", nil] retain];

Полагаю, первый лучше, оставление в конце второго примера легко пропустить. Я бы посоветовал вам прочитать больше об управлении памятью в Какао.

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