Objective c alloc应该返回什么类型?

Objective c alloc应该返回什么类型?,objective-c,Objective C,我有一个这样的方法,它使用类似的init方法对其他对象执行进一步的初始化 - (Foo*)initWithInput:(NSMutableString*)i { bar = [[Bar alloc] initWithInput:input]; return self; } 这将产生一个警告“Foo.m:19:warning:不兼容的Objective-C类型分配'struct Foo*',应为'struct Bar*” 我假设alloc方法返回一个(id)类型,然后编译器无法决定要在分

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

- (Foo*)initWithInput:(NSMutableString*)i {
  bar = [[Bar alloc] initWithInput:input];
  return self;
}
这将产生一个警告“Foo.m:19:warning:不兼容的Objective-C类型分配'struct Foo*',应为'struct Bar*”

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

- (Foo*)initWithInput:(NSMutableString*)i {
  bar = [((Bar*)[Bar alloc]) initWithInput:input];
  return self;
}
有没有一种惯用的处理方法

有惯用的处理方法吗 这个

Objective-C为选择器提供了一个平面名称空间,不支持协变分派(Java和C++)。因此,您需要为每个论证唯一地命名您的方法

这也是框架的标准模式。您[通常--有1或2个例外]看不到两个具有相同名称的方法--相同的选择器--具有不同的参数。当它发生时——如
alloc
的返回值——您将看到使用了
id

有惯用的处理方法吗 这个

Objective-C为选择器提供了一个平面名称空间,不支持协变分派(Java和C++)。因此,您需要为每个论证唯一地命名您的方法


这也是框架的标准模式。您[通常--有1或2个例外]看不到两个具有相同名称的方法--相同的选择器--具有不同的参数。当它发生时——就像
alloc
的返回值一样——您将看到使用了
id

所有
init
——方法应该返回
id
,而不是它们所属的类的类型,正是出于这个原因。这实际上是苹果公司在某处记录的。但是,我现在找不到链接。

所有
init
-方法应该返回
id
,而不是它们所属的类的类型,正是出于这个原因。这实际上是苹果公司在某处记录的。不过,我目前找不到链接。

在cocoa内部,有两种情况下,存在组合的alloc init方法,如stringWithFormat:。我已经尝试过制作我自己的版本,但由于某些原因,结果不是很好,我现在记不起来了。@Björn:这些有点不同,请看。在cocoa内部,有几种情况下,有组合的alloc init方法,如stringWithFormat:。我试过制作我自己的版本,但由于某种原因,结果不是很好,我现在记不起来了。@Björn:这些有点不同,看吧;如果一个-init*方法从未被假定为子类,那么它将返回一个特定的类型。在系统框架中,有非常少的方法可以做到这一点,但大多数方法都因为您所陈述的原因而被弃用;如果一个-init*方法从未被假定为子类,那么它将返回一个特定的类型。在系统框架中,有非常少的方法可以做到这一点,但大多数方法都因为您所陈述的原因而被弃用。