Objective-c方法没有返回类型

时间:2012-09-04 09:21:13

标签: objective-c macos cocoa

写这样的Objective-c方法是否正确

-methodA: (NSString *)str // without return type 
{
    return @"test";
}

以上方法对我来说很好。
-methodA: (NSString *)str-(id)methodA: (NSString *)str相同吗? 我正在使用Mac 10.5 os x sdk。

7 个答案:

答案 0 :(得分:11)

回答你的问题,来自“Objective-C 2.0编程语言”:

  

如果未显式声明返回或参数类型,则假定它是方法和消息的默认类型 - id

因此- methodA:(NSString *)str有效且与- (id)methodA:(NSString *)str相同。

然而,虽然说它肯定是不寻常的编码实践而且不被鼓励 - 输入额外的四个字符!

答案 1 :(得分:3)

- (void) methodA (NSString *)str //always start a methodod name lower case
{
  return;  //If you do not return anything then there is nothing to return. 
}

(id)(void)不同。你必须在这里归还一些东西。 id表示任何类型的对象。只有void代表'没有'。

答案 2 :(得分:2)

我在我的应用中更改了-init:

-init
{
    ...
    return self;
}

并且编译器没有显示任何警告,如果我改变了-init,那么:

-(int)init
{
    ...
    return 0;
}

编译器显示有关预期类型的​​警告,所以我可以说-init和 - (id)init是相同的方法,因为我甚至不知道编译器会通过这种语法,因为检查语言的这些功能是不好的做法: )。我将阅读Apple有关Objective-C的文档并尝试找出有关它的内容。谢谢你提出的好问题:)

编辑:

哇,你可以阅读文档here,章节类接口。 (void),(NSObject *)等只是强制转换。 Quote:“使用标准C语法声明方法返回类型,以便将一种类型转换为另一种类型”。另一个引用:“如果没有显式声明返回或参数类型,则假定它是方法和消息的默认类型 - 一个id”。

答案 3 :(得分:2)

允许,如语言规范所述

  

如果未显式声明返回或参数类型,则假定它是方法和消息的默认类型 - id

答案 4 :(得分:0)

这样做:

- (void)methodA:(NSString *)str 
{
  //non returning method;
}

- (NSString *)methodA:(NSString *)str 
{
  return str;  //returning method;
}

答案 5 :(得分:0)

如果它编译并按预期运行,那么它就可以了。但我不会说这是好习惯。

如果我不得不猜测,我会假设你的方法什么也不会返回。因此,尽管“正确”,但它具有误导性。

如果你确实想要返回任何类型的对象,那么额外的四个字符是否会受到伤害?如果它确实没有返回任何内容,请设置返回类型void。令人满意的编译器很容易,但不是整个故事。

答案 6 :(得分:0)

即使它编译它也不正确。它让其他开发者的生活变得更加艰难,包括你未来的自我。