我有一个这样的方法,它使用类似的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)
是否有一种惯用的处理方式?
是否有一种惯用的处理方式?
Objective-C具有用于选择器的平面命名空间,并且不支持协变调度(Java和C++).因此,您需要为每个论证命名您的方法.
这也是框架的标准模式.你[通常 - 有1或2个例外]没有看到两个具有相同名称的方法 - 相同的选择器 - 具有不同的论证.当它确实发生时 - 比如返回值alloc- 你会看到id用过的.
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |