【发布时间】:2013-03-06 14:09:51
【问题描述】:
在Objective-C中,为什么我们不能alloc+init或new一个基类对象和超类,而我们可以使用超类的构造函数来初始化?
下面是一些代码:
s1 可以很舒服地创建。
NSMutableString *s1=[NSString string];
NSLog(@"%@",s1);
但是s2和s3不行,并给出警告
Incompatible pointer types initializing 'SubClass *__strong' with an expression of type'BaseClass *'
NSMutableString *s2=[[NSString alloc] init];
NSLog(@"%@",s2);
NSMutableString *s3=[NSString new];
NSLog(@"%@",s3);
//here no warning.
id mem=[NSString alloc];
NSMutableString *s4=[mem init];
NSLog(@"%@",s4);
当我们将 alloc + init 分成两个不同的语句时会发生什么?
【问题讨论】:
-
你不认为这两个问题是一样的吗?
-
@InderKumarRathore :是的,我知道,这就是我链接那个的原因,我想让它泛化到所有子类和超类。
-
这很好,但我几乎找不到这两个问题之间的任何区别..
-
s1不应该这样创建,编译器至少应该给出一个类型警告......事实上他们都应该给出警告......
标签: ios objective-c macos compiler-construction clang