iPhone возвращает UIImageView от NSArray - PullRequest
0 голосов
/ 06 февраля 2009

Прежде всего большое спасибо за то, что нажали на мой вопрос.

У меня есть несколько UIImageView и NSMutableArray

at .h

{
    IBOutlet UIImageView *img1;
    IBOutlet UIImageView *img2;
    IBOutlet UIImageView *img3;
    NSMutable Array *aImg;
}
@property(nonatomic, retian) IBOutlet UIImageView *img1;
@property(nonatomic, retian) IBOutlet UIImageView *img2;
@property(nonatomic, retian) IBOutlet UIImageView *img3;
@property(nonatomic, retain) NSMutableArray *aImg;

ат. М

-(void)viewDidLoad
{
    [super viewDidLoad];
    aImg = [NSMutableArray arrayWithObjects: img1, img2, img3, nil];
}

тогда в других функциях, когда я пишу

UIImageView *tmp1;
tmp1 = [aImg objectAtIndex:0];

сказано GDB: программа загружена; и вывел на экран какое-то дерьмо
0x92a1d688 <+0024> mov 0x20 (% edx),% edi

Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 06 февраля 2009

Это была ошибка EXC BAD ACCESS? Могу поспорить, что это было. Это происходит, когда вы пытаетесь получить доступ к объекту, который был удален или освобожден из памяти.

Эта строка:

aImg = [NSMutableArray arrayWithObjects: img1, img2, img3, nil];

возвращает объект массива, установленный на autorelease. Это означает, что после того, как событие, вызвавшее это действие, завершится, оно будет выпущено. Если вы не сохраните его специально, он будет освобожден, счетчик сохранится до нуля, и объект будет освобожден.

Затем, когда вы попытаетесь использовать массив, его на самом деле нет, и программа вылетает. Если вы сделаете это вместо:

aImg = [[NSMutableArray alloc] initWithObjects: img1, img2, img3, nil];

Тогда вы непосредственно инициализируете массив, и этот не будет автоматически освобожден. Просто убедитесь, что в методе - (void) dealloc вашего класса, который содержит этот массив, вы добавляете:

[aImg release];

Прочтите этот документ, затем прочитайте его снова. Это очень важный материал для разработки iPhone. http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

0 голосов
/ 06 февраля 2009

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

-(void)viewDidLoad{
    [super viewDidLoad];
    aImg = [[NSMutableArray arrayWithObjects: img1, img2, img3, nil] retain];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...