Objective-Cの(id)メソッドは、後でのalloc
み初期化するために使用されますか?
NSString *stringC = @"My World";
NSString *sample = [[NSString alloc] initWithString:stringC];
Objective-Cの(id)メソッドは、後でのalloc
み初期化するために使用されますか?
NSString *stringC = @"My World";
NSString *sample = [[NSString alloc] initWithString:stringC];
Objective-Cのinitメソッドは、新しく割り当てられたインスタンスのみを対象としています。その理由は次のとおりです。
self
initメソッドは、関連付けられたものとは異なるポインターを再割り当てして返すことができます(これが、変数を常にinitの戻り値として割り当てるalloc
理由です)。これは、以前に初期化されたオブジェクトでinitを呼び出すと、新しいメモリへのポインタが返される可能性があることを意味します。これにより、いくつかの問題が発生します。
まず、変数に新しいポインターを割り当てない場合、それは無意味またはさらに悪いことでした。次に、「古い」オブジェクトへの追加のポインタが「ぶら下がっている」ようになり、厄介になります。
構成に関しては、@"foo"
Cのconst文字列にほぼ類似しています(NSStringsは不変ですが、ところで)、これは、揮発性文字へのポインターではなく、NSStringインスタンスへのポインターであり、必要ありません。init
それに。誤ってアスタリスクを省略したかどうかはわかりませんが、@ ""はNSStringへのポインタを生成するため、次の行と同様に、その行にはアスタリスクが必要です。
idはObjective-Cのvoid *
オブジェクト専用です。これは基本的にコンパイラに2つのことを伝えます。
そして#2には1つの典型的な意味があります:あなたはそれにメッセージを送ることができます
void *と同様に、他のオブジェクトタイプが必要で、コンパイラが文句を言わない場合は、タイプキャストを(id)として渡すことで回避できます。
init *メソッドの前に、割り当てる必要があると言った方がよいでしょう。
例えば、
NSString * test = [NSString stringWithFormat:@"hello world"];
IDも返しますが、「alloc」呼び出しの後ではありません。