Ваш вопрос не ясен. Например, вы объявили imageArray
как переменную экземпляра, глобальную переменную или, возможно, и то и другое - «В самом верху реализации» можно прочитать как «начало файла», «верх реализации чуть ниже @implementation
в скобках» et c.
Итак, мы предполагаем, будем надеяться, что это поможет.
Во-первых, из того, что вы сообщаете; что init запускается, но в методе экземпляра и доступе к переменным экземпляра "не удается" каким-то неуказанным способом; Вы можете иметь две разных переменных, объявленных в разных областях. Без минимального воспроизводимого примера 1012 * мы не можем быть более точным c. Что вы можете попробовать, это вставить:
NSLog(@"Loc A imageArray @%p = %p", &imageArray, imageArray);
в различных местах, где вы меняете «A» (на «B», «C» ...) для каждого, где вы находитесь доступ imageArray
. Будет напечатан адрес самой переменной, из которого вы можете определить, всегда ли вы ссылаетесь на одну и ту же переменную , а содержимое переменной - как адрес, по которому вы можете определить, изменяется ли значение, т.е. это nil
или массив, на который он ссылается, изменился.
Во-вторых, вы пишете: «Я тоже объявил его в файле GLViewController.h». Обычно вы не объявляете переменные экземпляра в файле .h
, хотя можете, и вы не повторно объявляете глобальные переменные в .h
, и это должно привести к ошибке компилятора - вы не ' не сообщать о такой ошибке, которая приводит к описанной выше возможности, что у вас может быть две переменные в разных областях.
Если вы будете sh объявлять глобальную переменную в file.m
и чтобы он был доступен для другого кода в другом файле, тогда в file.h
вы включаете для него объявление extern
:
extern NSArray* imageArray;
extern
утверждает, что эта строка не объявляет саму переменную, а что переменная объявлена в другом месте и доступна. (Вас может удивить, почему вы не добавляете extern
к функциям / методам, в этих случаях extern
неявно.)
Надеюсь, что это поможет каким-то образом. Если это совсем не помогает, я предлагаю вам задать совершенно новый вопрос, содержащий более подробную информацию, минимальный воспроизводимый пример и т. Д. c. (Если вы сейчас редактируете этот вопрос, люди могут пропустить изменения, думая, что видели вопрос.) Вы всегда можете удалить этот вопрос, чтобы уменьшить беспорядок.