0

ユーザーがホームボタンを押したときにビューコントローラーがUIAlertViewを閉じる必要があるアプリを作成しています。したがって、アプリデリゲートを介してこれを行う必要があります。このビューコントローラのクラスには、他の多くのことのためにアプリデリゲートも必要なので、ヘッダーファイルに#importがあります。これまで、アプリデリゲートで@classを他の目的で使用していましたが、View Controllerで適切なメソッドを呼び出すことができるように、#importが必要になりました。#importループを回避するにはどうすればよいですか?これについて別の方法はありますか?

ありがとう。

4

4 に答える 4

3

ヘッダーで完全な定義が実際に必要な場合を除いて@class、.hファイル、および#import実際にメソッドを呼び出す.mファイルで使用してください。

#importヘッダーファイルで実際に使用する必要があるのは、インポートされたヘッダーがスーパークラスを定義している場合のみです。

于 2013-02-19T23:13:57.807 に答える
3

ループに関心がある理由は、アプリデリゲートがコントローラーについて多くのことを知っており、コントローラーがアプリデリゲートのメソッドを呼び出す必要があるためだと思います。私は重いアプリデリゲートを持つのが好きではないので、サービスクラスとユーティリティクラスにできるだけ多くの負荷をかける傾向があります。アプリデリゲートが絶対に実行しなければならないことがある場合は、シングルトンのサービスクラスを作成し、アプリデリゲートをそのサービスのデリゲートとして設定します(もちろんプロトコルを使用)。これで、コントローラーはこのサービスを呼び出して、通常はアプリデリゲートを呼び出す必要があることを実行できます。

また、通知センターを使用して、アプリデリゲートのイベントの多くをリッスンできることにも注意してください。

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(applicationDidEnterBackground:)
                                                 name:UIApplicationDidEnterBackgroundNotification
                                               object:nil]; 

そのため、アプリの代表者とまったく話をする必要がない場合があります。

于 2013-02-19T23:29:10.157 に答える
2

#importループを回避するには、次の例に従う必要があります

次のような2つのファイルがあるとします。

ABC.h ABC.m&XYZ.h XYZ.m

これで、ABC.hの先頭に#import XYZ.hを配置するだけで、「ABC.h」に「XYZ.h」をインポートできます。

ただし、「XYZ.h」に「ABC.h」をインポートする場合は、「#import」を使用してインポートすることはできません。これによりループが作成されます。

これを回避するには、@classABCを配置します。「XYZ.h」の@interfaceXYXのすぐ上に、「XYZ.m」に「#importABC.h」を配置します。

これは魅力のように機能します:)

于 2013-02-20T10:30:35.257 に答える
0

#import複数のインクルードを防ぎます。だから心配しないでください。理想的な世界では、慣例に従って@class、ヘッダーファイルで使用して実装ファイルに必要なクラスをインポートします。

于 2013-02-19T23:15:07.560 に答える