我来自c ++ / c#/ java camp,当我看到以下Objective-c语法时我很困惑......
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions { }
从我理解的内容(返回类型)functionName :( param type)param;如下
- (void)applicationWillResignActive:(UIApplication *)application { }
参数(UIApplication *)应用程序有什么问题didFinishLaunchingWithOptions?
答案 0 :(得分:3)
在Objective-C中,参数是方法签名的一部分。您描述的方法的选择器为application:didFinishLaunchingWithOptions:
。这来自Smalltalk,虽然它可能使方法声明更难阅读,但它使代码实际上易于阅读:
id anApplication;
id someOptions;
[delegate application:anApplication didFinishLaunchingWithOptions:someOptions];
正如您所看到的,生成的调用代码看起来就像是在阅读短语。
对于UIApplication
参数,这是您在整个Cocoa中可以看到的设计选择。委托中的所有方法都将接收它们所代表的对象作为其第一个参数。这使得您可以重用委托,并使其逻辑依赖于它们所代表的对象。
在这种情况下,您可以对不同的UIApplicationDelegate
实例使用相同的UIApplication
,并根据某些UIApplication
参数使其代码成为条件。
答案 1 :(得分:3)
这是帮助我获得它的原因。所有参数都被命名。奇怪的是因为您的第一个参数名称实际上是函数名称的一部分,或者,您可以将其视为:确实没有第一个参数名称。很多时候,您会看到或编写如下所示的函数:
-(returntype) SomeFunctionWithSuperParameterComingUpNext:(paramtype)param1 SuperParam2:(paramtype2)param2;
注意,函数名末尾的无意义描述描述了param。 ; - )
这真的让我早早地扭曲了,但是你很快就习惯了它,当你使用其他语言时,你真的会错过它。 : - )
希望有所帮助,并享受乐趣!!
答案 2 :(得分:1)
didFinishLaucnhingWithOptions:part是另一个参数的标识符,launchOptions - 这是一个NSDictionary * - ,所以不是在paramaters(java)之间有一个逗号,而是一个空格然后描述符然后是冒号然后是paramater。但是,实际的方法签名包括这些标识符或描述符。
编辑:有关更好的说明,请参阅@pgb答案。
它使代码WAY更容易阅读,并使程序员更难以拥有像a,b,c,foo,bar等蹩脚的变量名称,而你不知道它们是什么或做什么。
示例:
-(returntype) myFunction:(paramater1type)paramater1 paramater2descriptor:(paramater2type)paramater2 paramater3descriptor:(paramater3type)paramter3 {}
答案 3 :(得分:0)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions { }
奇怪地分手了。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }
会让我觉得它更容易阅读。这里有两个参数,application和launchOptions。