В 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 до двух разных операторов?