这样写objective-c方法是否正确
-methodA: (NSString *)str // without return type
{
return @"test";
}
以上方法对我来说效果很好。 一样
吗?
我正在使用sdk。-methodA: (NSString *)str
-(id)methodA: (NSString *)str
Mac 10.5 os x
这样写objective-c方法是否正确
-methodA: (NSString *)str // without return type
{
return @"test";
}
以上方法对我来说效果很好。 一样
吗?
我正在使用sdk。-methodA: (NSString *)str
-(id)methodA: (NSString *)str
Mac 10.5 os x
要回答您的问题,来自“Objective-C 2.0 编程语言”:
如果没有显式声明返回或参数类型,则假定它是方法和消息的默认类型——一个
id
.
所以- methodA:(NSString *)str
是有效的,与 相同- (id)methodA:(NSString *)str
。
不过话虽如此,这肯定是不寻常的编码习惯,不值得鼓励 - 输入额外的四个字符!
- (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
“无”。
我在我的应用程序中更改了 -init :
-init
{
...
return self;
}
并且编译器没有显示任何警告,如果我像这样更改 -init :
-(int)init
{
...
return 0;
}
编译器显示有关预期类型的警告,所以我可以说 -init 和 -(id)init 是相同的方法,因为我什至不知道编译器会通过这种语法,并且因为这样检查语言的特性是不好的做法:)。我将阅读 Apple 的有关 Objective-C 的文档,并尝试找出相关内容。谢谢你的好问题:)
编辑:
哇,你可以在这里阅读文档,类接口一章。(void)、(NSObject*) 等只是强制转换。引用:“方法返回类型是使用标准 C 语法声明的,用于将一种类型转换为另一种类型”。另一个引用:“如果没有显式声明返回或参数类型,则假定它是方法和消息的默认类型 - 一个 id”。
正如语言规范所述,这是允许的
If a return or parameter type isn’t explicitly declared, it’s assumed to be the default type for methods and messages—an
id
.
好吧,如果它编译并按照您的预期运行,那么它就可以工作。但我不会说这是一个好习惯。
如果我不得不猜测,我会假设您的方法不会返回任何内容。因此,尽管“正确”它具有误导性。
如果你真的想返回任何类型的对象,那额外的四个字符会伤害吗?如果它真的什么都不返回,则设置返回类型为void
. 取悦编译器很容易,但不是全部。
即使它编译它也不正确。它使其他开发人员的生活变得更加艰难,包括你未来的自己。
做这个:
- (void)methodA:(NSString *)str
{
//non returning method;
}
- (NSString *)methodA:(NSString *)str
{
return str; //returning method;
}