0

@implementationセクションで通常の変数であるインスタンス変数(静的ではない)を宣言しました。複数のオブジェクトからその変数にアクセスすると、静的に宣言したかのように、すべてのオブジェクトが同じ変数を共有しているように見えました。

次に、インスタンス変数を(強力な)プロパティ(.mファイルでプライベートにするために定義)に変更すると、期待どおりに機能し始め、各オブジェクトが独自のバージョンのプロパティを取得しました。

その奇妙な「共有」動作で何が起こっていたのでしょうか。

4

2 に答える 2

3

インスタンス変数を宣言していません。グローバル変数を定義しました。あなたはこれをしました:

@implementation MyObject

int myVariable;

しかし、あなたはこれを行うべきでした:

@implementation MyObject {
    int myVariable;
}
于 2012-11-29T05:57:49.703 に答える
1

@implementationで通常の変数を定義するときは、グローバル変数を定義します。たとえば、午前では、次のように定義します。

@implementation classA

int tryMe = 99;

次に、bmでは、tryMeも使用します。

@implementation classB

-(void) func {
    extern int tryMe;
    NSLog(@"%i", tryMe); // This will print 99.
}

ただし、午前中に「static」を使用すると、ビルドエラーが発生し、「tryMe」が見つからなかったことが通知されます。「静的」であるため、変数を変数を定義するファイルに対してローカルにします。

一方、varをプロパティとして定義すると、varはクラスのメンバーになるため、クラスの各インスタンスにはvarの独自のコピーがあります。

于 2012-11-29T06:01:02.547 に答える