objective-c语法问题

时间:2011-06-08 20:42:38

标签: objective-c ios syntax

我来自c ++ / c#/ java camp,当我看到以下Objective-c语法时我很困惑......

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

从我理解的内容(返回类型)functionName :( param type)param;如下

- (void)applicationWillResignActive:(UIApplication *)application { }

参数(UIApplication *)应用程序有什么问题didFinishLaunchingWithOptions?

4 个答案:

答案 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。