0

私のアプリでは、私はこのようなことをしました、

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
 //何らかのコード
 appDelegate = なし;

ただし、アプリは正常に実行され、警告やクラッシュは発生しません。

誰でもこれを説明できますか?ありがとう。

4

4 に答える 4

4

最初に をappDelegate指摘しました[[UIApplication sharedApplication] delegate]。それからあなたはそれをどこにも向けさせませんでした。しかし[[UIApplication sharedApplication] delegate]、同じままです。あなたはそれで何もしませんでした。あなたはそれに触れさえしませんでした。

あなたがおそらく考えていることは次のとおりです。

 [[UIApplication sharedApplication] setDelegate:nil];

ただし、警告やクラッシュも発生しないはずです。nil に送信されたメッセージは何もしないため、アプリのデリゲート メソッドを呼び出さないだけです。

于 2013-06-17T13:01:22.000 に答える
1

[[UIApplication sharedApplication] delegate]は、プロジェクトを作成したときに自動的に作成されたアプリ デリゲートへのポインターを提供します。したがって、appDelegate = nil を設定すると、アプリ デリゲートへのポインタが nil に設定されます。自動的に作成されるアプリ デリゲートには何もしません。

于 2013-06-17T13:01:53.510 に答える
1
 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

この行を使用すると、appDelegate の共有インスタンスが返されます。

[UIApplication sharedApplication]--- シングルトンへのアクセスを提供します

delegateメソッドは、アプリ デリゲートへのポインターを返します。そして、すべての作業を終えた後に appDelegate に nil を割り当てたとき。なぜクラッシュするのですか?おそらく、nil 値を割り当てた後にメソッドを呼び出そうとする場合。それはうまくいきません。

于 2013-06-17T13:04:09.880 に答える
0

アプリのデリゲートではないappDelegateポインターを設定しています。nilこのコードを書いた後で[[UIApplication sharedApplication] delegate]も、 nil.

于 2013-06-17T12:59:56.647 に答える