UIImageView распределяет со странными адресами

#iphone #memory-management

#iPhone #управление памятью

Вопрос:

У меня есть 5 UIViews, которые выделяются с одним и тем же изображением.

После выделения они появляются с такими адресами:

  [0] = 0x0000000117068650  
 [1] = 0x00000001151ea1c0  
 [2] = 0x00000001151a77f0  
 [3] = 0x00000001170026c0  
 [4] = 0x00000001151b5c40  
 

Это то, что я делаю

 UIImage *Image = [UIImage imageNamed:@"Something.png"];
UIImageView *Containers[5];
for (int i = 0;i < 5; i  )
{
    Containers[i] = [[UIImageView alloc] initWithImage:Image];
    Containers[i].frame = CGRectMake(0,0, Image.size.width, Image.size.height);
    [self.view addSubview:Containers[i]];
}
 

Конечно, проект намного сложнее, но как это может произойти? Связано ли это с тем, как я объявляю UIImageViews?

Комментарии:

1. что-то не так с этими адресами? в конце концов, ваш симулятор использует виртуальную память. Кроме того, в Objective-C рекомендуется называть все переменные (и имена методов) строчными буквами. Поэтому используйте » containers » вместо » Containers «, » image » вместо » Image » и т. Д.

2. Это обычные 64-разрядные адреса памяти…

3. строка 6 не нужна, потому что при использовании initWithImage для фрейма устанавливается значение (0, 0, ширина, высота).

4. Проблема заключалась в том, что этот код приводил к сбою приложения. Настоящая проблема заключалась в том, что UIImage * на самом деле был переменной класса, и после него был объявлен int X[10] . К сожалению, в какой-то момент в программе это произошло X[-1] = TRUE; Таким образом, UIImage изменился на логическое значение TRUE . Вы можете себе представить результат. Мне совсем не нравится, что компилятор не вылетает, когда вы говорите array[-1] = something . Это очень плохо.