0

私はちょうどいくつかの古いコードを見ていました、そしてそれは私にこれらのどちらを使うべきかについて考えさせました、両方とも文句なしに働くようです。違いを見つけたとき、私はただ興味がありました。

これ:

id <UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];

また

id appDelegate = [[UIApplication sharedApplication] delegate];
4

3 に答える 3

2

meronixの答えは正しいですが、重要な点を見逃しています。

可能な限り最も具体的な型を持つように、常に変数を宣言する必要があります。

そうすることで、コードを検証するための最大量の情報をコンパイラーに提供します。したがって、これは、セレクターの検索を最小数に制限するようにコンパイラーに指示するため、望ましい方法です。

id <UIApplicationDelegate> appDelegate = ...;

有効なセレクターのセットを、に存在するセレクターのみid<SomeProtocol>に制限することに注意してください。このため、プロトコルが実装として宣言されている場合や、型宣言として(または)が表示される場合があります。SomeProtocol<NSObject>id<SomeProtocol, NSObject>NSObject<SomeProtocol>*

于 2012-09-25T16:20:29.413 に答える
2

appDelegateに何を求めているかによると思います

つまり、UIApplicationDelegateプロトコルで定義されているプロパティ「window」を使用する場合は、次のようになります。

NSLog(@"%@",  appDelegate.window);

次に、使用する必要があります:

id <UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];

しかし、試してみると:

id appDelegate = [[UIApplication sharedApplication] delegate];
NSLog(@"%@",  appDelegate.window);

エラーが発生します...

于 2012-09-25T11:54:05.037 に答える
0

これを試して..

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication]delegate];

あらゆる種類の警告を回避するため

于 2012-09-25T12:20:06.737 に答える