用`id`键入方法

Jon*_*ing 1 conventions objective-c

在Objective-C中,我通常会看到返回动态类型对象的方法,其定义如下:

- (id)someMethod:(id)someParameter;
Run Code Online (Sandbox Code Playgroud)

我知道我也可以做到这一点:

- someMethod:someParameter;
Run Code Online (Sandbox Code Playgroud)

有趣的是,我在更多核心级别的基础课程中看到了后一种惯例,但其他人似乎都使用了第一种.由于Objective-C运行时会推断出无类型的方法或参数将返回id,为什么要包含它?它不打破阅读的流程吗?

我不仅想知道开发人员在考虑使用这个约定时可能出现的问题,还想知道你们是否认为这很简单?

Bar*_*ark 5

由于语言允许两种形式,它真的是一种风格.鉴于此,Objective-C在很大程度上依赖于可读性而不是简洁性,并且大多数开发人员更喜欢第一个(-(id)someMethod)因为它明确了返回类型.

与您的问题不直接相关,但id不是动态类型.它是指向Objective-C对象的指针.由于消息调度在Objective-C中是动态的,id因此通常可以将其视为动态类型,但它实际上仍然是静态类型.换句话说,Objective-C是动态绑定的,但是静态类型化.

  • 类似地,C函数默认返回int,但是依赖于它的C样式非常糟糕.在Objective-C中,这个默认的返回类型更改为方法的id,但它仍然被认为是依赖于它的坏样式. (2认同)