9

这样写objective-c方法是否正确

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

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

4

7 回答 7

13

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

如果没有显式声明返回或参数类型,则假定它是方法和消息的默认类型——一个id.

所以- methodA:(NSString *)str是有效的,与 相同- (id)methodA:(NSString *)str

不过话虽如此,这肯定是不寻常的编码习惯,不值得鼓励 - 输入额外的四个字符!

于 2012-09-04T09:49:16.280 回答
4
- (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“无”。

于 2012-09-04T09:23:52.110 回答
3

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

-init
{
    ...
    return self;
}

并且编译器没有显示任何警告,如果我像这样更改 -init :

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

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

编辑:

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

于 2012-09-04T09:41:18.087 回答
3

正如语言规范所述,这是允许的

If a return or parameter type isn’t explicitly declared, it’s assumed to be the default type for methods and messages—an id.

于 2012-09-04T09:49:18.823 回答
1

好吧,如果它编译并按照您的预期运行,那么它就可以工作。但我不会说这是一个好习惯。

如果我不得不猜测,我会假设您的方法不会返回任何内容。因此,尽管“正确”它具有误导性。

如果你真的想返回任何类型的对象,那额外的四个字符会伤害吗?如果它真的什么都不返回,则设置返回类型为void. 取悦编译器很容易,但不是全部。

于 2012-09-04T09:28:19.287 回答
1

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

于 2012-09-04T09:29:58.653 回答
0

做这个:

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

- (NSString *)methodA:(NSString *)str 
{
  return str;  //returning method;
}
于 2012-09-04T09:25:50.137 回答