alloc应该返回什么类型?

bjo*_*rns 0 objective-c

我有一个这样的方法,它使用类似的init方法对其他对象执行进一步的初始化.

- (Foo*)initWithInput:(NSMutableString*)i {
  bar = [[Bar alloc] initWithInput:input];
  return self;
}
Run Code Online (Sandbox Code Playgroud)

这会产生一个警告"Foo.m:19:警告:不兼容的Objective-C类型分配'struct Foo*',预期'struct Bar*'"

我假设alloc方法返回一个(id)类型,然后编译器无法决定我想在分配的对象上使用哪个initWithInput:方法.我当然可以删除这样的警告,但它并不是非常漂亮

- (Foo*)initWithInput:(NSMutableString*)i {
  bar = [((Bar*)[Bar alloc]) initWithInput:input];
  return self;
}
Run Code Online (Sandbox Code Playgroud)

是否有一种惯用的处理方式?

bbu*_*bum 5

是否有一种惯用的处理方式?

Objective-C具有用于选择器的平面命名空间,并且不支持协变调度(Java和C++).因此,您需要为每个论证命名您的方法.

这也是框架的标准模式.你[通常 - 有1或2个例外]没有看到两个具有相同名称的方法 - 相同的选择器 - 具有不同的论证.当它确实发生时 - 比如返回值alloc- 你会看到id用过的.