2

Java の経験が少しあるため、Objective c の学習を始めたばかりで、このサイトは多くの質問に答えるのに非常に役立ちましたが、よく理解できない問題にぶつかりました。このトピックについてはかなりの量を読む必要がありますが、どこが間違っているのかがわかりません。

私はこれを読みました:

Objective C はクラス データ メンバー (つまり、同じクラスのすべてのオブジェクトで共有されるデータ) をサポートしていませんが、静的修飾子を使用してエミュレートできます。たとえば、Employee クラスの実装ファイルで static int count 変数を宣言すると、すべての Employee オブジェクトが count という単一の整数変数を共有することになります。

しかし、私はしようとせずにこの機能になってしまったようです...そして私はそれを望んでいません!

シナリオは、特定のイベントをカウントし、新しいメソッドで使用するためにグローバル変数 (@implementation 行のすぐ下) を宣言する UIImageView のカテゴリがあることです。

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

単一の UIImageView があれば、すべて正常に動作します。ただし、UIImageView の 2 番目のインスタンスを作成して追加すると、このカウント変数が 2 つの間で共有され、予期しない動作が発生します。

オブジェクトの作成方法を示すのに関連する可能性がある図:

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つのビューで私が何をしているのかをもう少し説明するために、この場合の自己はViewControllerです。

4

1 に答える 1

2

探しているのはインスタンス変数ですが、カテゴリはそれらをインターフェイスAppleに追加できません:

カテゴリでは、クラスの追加のインスタンス変数を宣言できないことに注意してください。メソッドのみが含まれます。

代わりに継承を使用する必要があります。

@interface MyView : UIImageView {
    int touchesCount;
}
// ...
@end
于 2010-09-18T14:25:32.120 に答える