objective-c语法问题

objective-c语法问题,objective-c,ios,syntax,Objective C,Ios,Syntax,我来自c++/c#/java阵营,当我看到下面的objective-c语法时感到困惑 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions { } 据我所知,(返回类型)functionName:(param类型)param;像下面这样 - (void)applicationWillResignActive:(UIAppl

我来自c++/c#/java阵营,当我看到下面的objective-c语法时感到困惑

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
    (NSDictionary *)launchOptions { }
据我所知,(返回类型)functionName:(param类型)param;像下面这样

- (void)applicationWillResignActive:(UIApplication *)application { }
参数(UIApplication*)应用程序完成启动时使用的选项是什么

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
    (NSDictionary *)launchOptions { }
有点奇怪

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }

我想这会使它更容易阅读。这里有两个参数,application和launchOptions。

didFinishLaucnhingWithOptions:part是另一个参数launchOptions的标识符,launchOptions是一个NSDictionary*,因此在参数(java)之间没有逗号,而是先是空格,然后是描述符,然后是冒号,再是参数。然而,实际的方法签名包括这些标识符或描述符

编辑:有关更好的描述,请参见@pgb answer

它使代码更容易阅读,并且使程序员更难拥有糟糕的变量名,比如a、b、c、foo、bar等等,而您不知道它们是什么或做什么

例如:

-(returntype) myFunction:(paramater1type)paramater1 paramater2descriptor:(paramater2type)paramater2 paramater3descriptor:(paramater3type)paramter3 {}

在Objective-C中,参数是方法签名的一部分。您描述的方法的选择器是
应用程序:didFinishLaunchingWithOptions:
。这源于,虽然它可能使方法声明更难阅读,但它使代码实际上更容易阅读:

id anApplication;
id someOptions;

[delegate application:anApplication didFinishLaunchingWithOptions:someOptions];
如您所见,生成的调用代码看起来就像您正在阅读一个短语

至于
UIApplication
参数,这是您将在整个Cocoa中看到的设计选择。委托中的所有方法都将接收作为其委托对象的第一个参数。这使得您可以重用委托,并使其逻辑取决于委托对象


在这种情况下,您可以对不同的
UIApplication
实例使用相同的
uiapplicationelegate
,并根据一些
UIApplication
参数对其代码进行条件化处理。

这就是帮助我获得它的原因。所有参数都已命名。奇怪的是,您的第一个参数名实际上是函数名的一部分,或者,您可以将其视为:实际上没有第一个参数名。很多时候,您会看到或编写如下所示的函数:

-(returntype) SomeFunctionWithSuperParameterComingUpNext:(paramtype)param1 SuperParam2:(paramtype2)param2;
请注意,函数名末尾的无意义描述描述了参数。;-)

这一点在我很早的时候就让我很不舒服,但是你很快就习惯了,而且当你使用其他语言时,你实际上会错过它。:-)


希望对你有帮助,玩得开心

如果application:(UIApplication*)application是一个参数,为什么它在方法名(didFinishWithLaunchOptions)之前?奇怪的是,同一个参数有两个标识符?参数2描述器和参数2。。。区别是什么?描述符可能不是最好的术语..paramater是paramater2,它是您想要使用它时在方法中使用的(foo=paramater2)。谷歌中缀符号,它基本上是一种知道方法调用中的参数是什么的方法(为什么目标c是“详细的”)+1希望我能选择两个答案,这与我选择的答案结合起来有助于我理解它。+1,但请以小写字符开头方法名称:-)