Цель C совет? - PullRequest
       36

Цель C совет?

0 голосов
/ 05 декабря 2010

Я хочу заменить это:

self.fajerImage     = [UIImage imageNamed:@"FirstViewBG_5N.png"];
self.shrogImage     = [UIImage imageNamed:@"FirstViewBG_4N.png"];
self.dohorImage     = [UIImage imageNamed:@"FirstViewBG_3N.png"];
self.aaserImage     = [UIImage imageNamed:@"FirstViewBG_2N.png"];
self.mgribImage     = [UIImage imageNamed:@"FirstViewBG_1N.png"];
self.eeshaImage     = [UIImage imageNamed:@"FirstViewBG_0N.png"];

на цикл for .. Я не знаю, как вызывать ivars один за другим в цикле ..

Обратите вниманиечто помещение их в массив перед циклом - отличная идея, что мне не удалось реализовать ..

Спасибо!

Ответы [ 4 ]

6 голосов
/ 05 декабря 2010

Один отличный способ сделать это включает в себя кодирование значения ключа , как обсуждалось в этого сообщения в блоге . Попробуйте использовать:

NSArray *nameArray = [[NSArray alloc] initWithObjects:@"fajerImage",
                                                     @"shrogImage",
                                                     @"dohorImage",
                                                     @"aaserImage",
                                                     @"mgribImage",
                                                     @"eeshaImage",
                                                     nil];

int i = 0;
for (NSString *name in nameArray) {
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"FirstViewBG_%dN.png", i++]];
    [self setValue:image forKey:name];
}

[nameArray release];

(Вы должны заменить UIImage в моем коде выше фактическим типом объекта, если я ошибся.)

3 голосов
/ 05 декабря 2010

Вы можете использовать синтаксис кодирования значения ключа:

NSString *names=[NSArray arrayWithObjects:@"eeshaImage",@"mgribImage",@"aaserImage",@"dohorImage",...,nil];

for (int i=0; i<names.count; i++) {
      NSString *name=[names objectAtIndex:i];
      UIImage *image=[UIImage imageNamed:[NSString stringWithFormat:@"FirstViewBG_%dN.png",i
      [self setValue:image forKey:name];
 }
1 голос
/ 05 декабря 2010

Другая вещь, которую вы можете сделать, как правило, достаточно быстрая, - это распределять изображения по требованию, а не пытаться инициализировать их все сразу. Назовите им что-нибудь вроде «FirstViewBG_Fajer.png», а затем напишите метод экземпляра, например:

- (UIImage *) imageNamed:(NSString *) name {
    return [UIImage imageNamed: [NSString stringWithFormat:
    @"FirstViewBG_%@.png", name]];
}
1 голос
/ 05 декабря 2010

Мой коллега любит шаблон, подобный следующему (непроверенный):

 id *images[] = {
    &eeshaImage,
    &mgribImage,
    &aaserImage,
    &dohorImage,
    &shrogImage,
    &fajerImage
 };

 for (size_t i = 0;i < sizeof(images) / sizeof(*images);++i) {
    NSString *name = [NSString stringWithFormat:@"FirstViewBG_%zuN.png", i];
    *(images[i]) = [[UIImage imageNamed:name] retain];
 }

Вы должны спросить себя, стоит ли цена читабельности, чтобы сделать ее чуть более расширяемой.

...