2011-02-02 2 views
1

Что не так с этим кодом?EXC_BAD_ACCESS на простой массив UIImageViews

в интерфейсе:

NSArray *myImages; 
@property (nonatomic, retain) NSArray *myImages; 

реализация:

NSArray *array = [NSArray arrayWithObjects: 
       [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]], 
       [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2.png"]],   
       [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image3.png"]], 
       nil]; 
self.myImages = array; 
[array release]; 

Если я вхожу myImages сразу после его инициализации, он правильно записывает массив UIImageViews. Однако позже в приложении, когда я пытаюсь получить доступ к self.myImages из другого метода, я получаю EXC_BAD_ACCESS. Он сохраняется в интерфейсе. В чем проблема?

ответ

5

Не выпускать array. Используя arrayWithObjects:, он вернет автореализованный объект. В каком-то смысле вы выпускаете его дважды. Альтернатива:

[[NSArray alloc]initWithObjects:...] 

Затем вы можете освободить array.

статья управления памятью знакомства от Apple:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043-BEHDEDDB

+0

ahh, конечно. это было глупо. – sol

2

arrayWithObjects удобный метод и возвращает autoreleased объект, поэтому удалите

[array release]; 

Plus вы утечка памяти, делая это:

[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]] 

Beca на этот раз изображение не будет выпущено.

+0

спасибо за примечание о UIImageView – sol

Смежные вопросы