我刚刚查看了一些旧代码,它让我思考其中的哪些代码使用,两者似乎都没有抱怨。当我发现差异时,我很好奇。
此:
id <UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];
OR
id appDelegate = [[UIApplication sharedApplication] delegate];
答案 0 :(得分:2)
我想这取决于你对appDelegate的要求
我的意思是,如果您要使用该物业&#34; window&#34;在UIApplicationDelegate协议中定义:
NSLog(@"%@", appDelegate.window);
然后你应该使用:
id <UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];
但如果你尝试:
id appDelegate = [[UIApplication sharedApplication] delegate];
NSLog(@"%@", appDelegate.window);
你会收到错误......
答案 1 :(得分:2)
虽然meronix的答案是正确的,但它错过了重要的一点。
您应该始终声明变量以使其具有最具体的类型。
通过这样做,您可以为编译器提供用于验证代码的最大信息量。因此,这是首选,因为它告诉编译器将选择器的搜索限制为最小数字:
id <UIApplicationDelegate> appDelegate = ...;
请注意,id<SomeProtocol>
将有效选择器集限制为仅 SomeProtocol
中存在的选择器。这就是为什么你有时会看到声明为同时实现<NSObject>
的协议,或者你会看到id<SomeProtocol, NSObject>
(或NSObject<SomeProtocol>*
)作为类型声明。
答案 2 :(得分:0)
试试这个..
YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication]delegate];
避免任何形式的警告