写这样的Objective-c方法是否正确
-methodA: (NSString *)str // without return type
{
return @"test";
}
以上方法对我来说很好。
-methodA: (NSString *)str
与-(id)methodA: (NSString *)str
相同吗?
我正在使用Mac 10.5 os x
sdk。
答案 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)
即使它编译它也不正确。它让其他开发者的生活变得更加艰难,包括你未来的自我。