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 を 2 つの異なるステートメントに分割するとどうなりますか?