2

私は iPhone プログラミングを学び始めていますが、これは明らかに非常に簡単な質問です。私はxcode 3.1.4で働いています。ここで、ウィンドウ ベースのアプリケーションの新しいプロジェクトを作成し、dealloc (AppDelegate.m ファイル内) を変更して、実際にコンソールで print ステートメントを作成すると、実際にはそのステートメントが表示されません。それで、私の質問はなぜですか?

明らかな答えを避けることができるように、変更された dealloc は次のとおりです。

- (void)dealloc {
    NSLog(@"Dealloc is called");
    [window release];
    [super dealloc];
}

これは変ですか?

もともと私はここに同様の質問を投稿していましたが、今では本当の問題はここで説明しているものであることがわかりました. モデレーターの皆さん、私の他のスレッドを削除してください。謝罪いたします。

4

3 に答える 3

4

appDelegate は、アプリケーションが終了するまで割り当て解除されません。終了した時点では、コンソールにメッセージを表示するには遅すぎます。

また、新しいプロジェクトでは、とにかく ARC を使用する必要があります。これにより、多くの場合、dealloc を呼び出す必要がなくなります。

于 2012-04-27T07:43:49.350 に答える
2

この dealloc が呼び出されたときに NSLog が利用できない可能性があります。App デリゲートは、プログラムの終了時にプロジェクトで最後に割り当て解除されるものです。

于 2012-04-27T07:43:19.613 に答える
1

それまでにアプリケーションが実行されている可能性があるため、呼び出されません。そして、それが呼び出されたときに、アプリケーションが終了している可能性があります。appdelegate の dealloc 関数が最後に呼び出されるという borrrden の指摘に同意します。retai/release、alloc/dealloc を理解したい場合は、xcode 3.2.6 を使用してみてください。ARC を使用したい場合は、ios5 で xcode 4.2 を試してください。

于 2012-04-27T07:52:29.067 に答える