Глобальная переменная обычного класса, совместно используемая экземплярами объекта - помогите! - PullRequest
2 голосов
/ 18 сентября 2010

Я только начал изучать цель c, имея небольшой опыт работы с Java, и этот сайт очень помог мне ответить на множество моих вопросов, но я столкнулся с проблемой, которую не совсем понимаю.На эту тему можно прочитать много, но я не могу точно понять, в чем я ошибся.

Я прочитал это:

Цель C не поддерживает данные классовчлены (то есть данные, используемые всеми объектами одного и того же класса), однако их можно эмулировать с помощью модификатора static.Например, объявление статической переменной int count в файле реализации класса Employee приведет к тому, что все объекты Employee будут иметь одну целочисленную переменную, называемую count.

Но я, похоже, в итоге оказался с этой функциональностьюбез попыток ... и я не хочу этого!

Сценарий состоит в том, что у меня есть категория UIImageView, в которой я объявляю глобальную переменную (чуть ниже моей строки @implementation) для подсчета определенногособытие и использовать его в моих новых методах.

@implementation UIImageView (Draggable)    
int touchesCount = 0;    
// methods ...

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

На рисунке это может быть важно, чтобы показать, как я создаю объекты:

UIImageView *myImageView = [[UIImageView alloc] initWithFrame:myImageRect]; 
UIImageView *myImageView2 = [[UIImageView alloc] initWithFrame:myImageRect];
// ... (create, manipulate and set 2 images to the 2 views)
[self.view addSubview:myImageView];
[self.view addSubview:myImageView2];

Кроме того, есть какие-нибудь предложения о том, где я могу пойти не так?

Спасибо!

Редактировать: Чтобы проиллюстрировать немного больше, что я делаюв случае двух представлений self в данном случае является ViewController.

1 Ответ

2 голосов
/ 18 сентября 2010

Вы ищете переменные экземпляра, но категории не могут добавить их в интерфейс Apple :

Обратите внимание, что категория не может объявлять дополнительные переменные экземпляра для класса; это включает только методы.

Вы должны использовать наследование вместо:

@interface MyView : UIImageView {
    int touchesCount;
}
// ...
@end
...