1

私はこれが初めてなので、Objective C がローカル変数とメンバー変数をどのように処理するかは明確ではありません。このような関数内にビューを作成していると考えてください...

fun () {
   new_class *var = [new_class alloc] init]

   // some code to push the view here...
}

ここではすべて正常に動作します。私の質問は、var がローカル変数であることです。関数のスコープが終了すると、死ぬかどうか? ビューで何らかのアクションを実行しているときに、ビューがどのように正しく機能しているかが死んだ場合...

ありがとう...

4

3 に答える 3

2

ポインター varはスコープ外に出て「削除」されますが、ポインターが指しているオブジェクト後で解放されるまで削除されません (手動または有効な場合は ARC を介して)。

于 2012-10-22T07:09:55.717 に答える
2

他のオブジェクトがそれを指していない場合、var は解放されている必要があります。問題は次のとおりです。

if it dies how the view is working properly when I am doing some action in it

あなたの "var" がUIView例えばであり、あなたの場合、あなた[self.view addSubview:var]はそれを指している2つのオブジェクトを持っています.*varself.view

于 2012-10-22T07:12:33.257 に答える
1

いいえ、死ぬことはありません。変数は関数に対してローカルにスコープされているため、コンパイラはvarfun() メソッドの外部にアクセスすることを許可しませんが、メモリ リークが発生します (ARC がない場合)。

メモリを割り当てましたが、解放していません。

手動で解放するか、AutoReleasePool を使用して、プールが空になったときに解放することができます。

IOS の新しいバージョンでは、Apple は自動参照カウント (ARC) のサポートを追加しました。これにより、コンパイラが[obj release];ステートメントを追加します。

コメントから:

スタックに置かれたオブジェクトがあり、後でそれを解放したい場合。UIView をポップすると、そのビューへのポインターが返されます。それをローカル変数に割り当てると、次の準備ができたら解放できます。

UIView * myView = [someViewHandler popView]; 
[myView release]; myView = nil;
于 2012-10-22T07:12:21.280 に答える