4

メソッドで宣言された変数は、メソッド呼び出しが完了した後に消去されますか? つまり、メソッド「someMethod」があり、それが呼び出されるたびにスタックプロパティから別の NSString を返したい場合、メソッドはスタック上の次のオブジェクトを返すか、x が消去されてから最初のインデックスを返したままにしますか?メソッド呼び出しの終わり。関数呼び出し後に変数が消去されることをCが知っている場合、それは目的のCでも同じですか? 変数 x に別のプロパティを使用すると、この問題が発生しますか? ありがとう

(Double) someMethod{
int x;
[self.stack objectAtIndex:x];
x++;
}

コメントを読んだ後、x を置き換えるプロパティを作成しようとしましたが、ここに私が書いたものがありますが、「「_location」のローカル宣言がインスタンス変数を非表示にする」というエラー警告が表示されます。これはどういう意味ですか?

@property (nonatomic) int location;
@synthesize location=_location;

-(int) location{
    if(!_location){
        int _location = 0;
     //warning is here 
    return _location;
     }
_location++;
return _location;

}

 (Double) someMethod{
int x;
[self.stack objectAtIndex:self.location];
x++;
}
4

3 に答える 3

4

メソッドで宣言された変数は、メソッド呼び出しが行われた後に消去されますか?

はい

Objective CのメソッドはC関数の「上」に実装されるため、同じルールが適用されます。特に、コードは未定義の動作(初期化されていない変数の読み取り)を示します。

この問題を修正するには、コードスニペットが現在宣言して いる自動x変数の代わりにインスタンス変数を追加します。


Automaticは、「スタック」変数の「正式な」名前です。つまり、メソッド/関数内で宣言する変数です。

于 2012-08-01T00:47:09.330 に答える
1

はい、ローカル変数の有効期間は、囲んでいる関数が実行されている時間に制限されます(ブロックの例外を除きますが、この場合はブロックを使用していません)。

xの呼び出し間でその値を維持したい場合は、カウンターがオブジェクトプロパティとして最適someMethodです。

于 2012-08-01T00:46:55.470 に答える
1

警告についてのあなたの質問に答える...

if inメソッドlocation()内で宣言すると、

int _location = 0;

このローカル変数は、前に作成したプロパティと同じ名前です。

@syntenshize location = _location

したがって、(プログラマーにとって)彼が現在使用しているものを知ることは混乱します。

コンパイラは、if_locationがint...であり、if_locationがプロパティであると理解します。

于 2012-08-01T03:03:15.823 に答える