在 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 分成两个不同的语句时会发生什么?