对象实例之间共享的常规类全局变量 - 帮助!

时间:2010-09-18 13:15:19

标签: objective-c global-variables categories data-members

我刚刚开始学习具有一点Java经验的目标c,这个网站对回答我的大量问题非常有帮助,但我遇到了一个我无法理解的问题。关于这个话题有很多东西要读,但我找不到我出错的地方。

我读到了这个:

  

Objective C不支持类数据成员(即同一类的所有对象共享的数据),但是,可以通过使用static修饰符来模拟它们。例如,在Employee类的实现文件中声明一个静态int count变量将导致所有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];

除此之外,有关我可能出错的地方的任何建议吗?

谢谢!

编辑:为了说明我对2个视图的更多了解,在这种情况下,self是一个ViewController。

1 个答案:

答案 0 :(得分:2)

您要查找的是实例变量,但类别无法将这些变量添加到接口 Apple

  

请注意,类别不能为类声明其他实例变量;它只包括方法。

您应该使用inheritance代替:

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