私はObjective-Cを勉強しています。これらの NSString 宣言の違い (ある場合) を教えてください。
NSString *firstString;
firstString = @"First string";
NSString *secondString = [NSString string];
secondString = @"Second string";
私はObjective-Cを勉強しています。これらの NSString 宣言の違い (ある場合) を教えてください。
NSString *firstString;
firstString = @"First string";
NSString *secondString = [NSString string];
secondString = @"Second string";
2 つ目は 2 つの文字列を作成し、最初の文字列を使用せずに破棄します。この行で:
NSString *secondString = [NSString string];
新しい文字列を作成していますが、これは空であるためあまり役に立ちません。それを に割り当てていますsecondString
。次に、別の文字列 ( @"Second String"
) を に割り当てていますsecondString
。
これを行う必要はありません。どちらの場合でも、次のように記述できます。
NSString *myString = @"MyString";
この構文は文字列リテラル@"Some string here"
と呼ばれ、コード内で実際の値を使用して NSString を指定するための省略形です。
最終結果として違いはありません。
最初の文字列が宣言され、文字列リテラル構文を介して値が割り当てられます ( NSNumbers
Xcode 4.4 以降でもこれを行うことができます)。
2 つ目は、文字列 (空) として初期化され、別の NSString オブジェクトが割り当てられています。この場合、実際には 2 つの NSString オブジェクトが作成されており、前者[NSString string]
は後者によって上書きされています。@"string value"
したがって、最初のものは最初nil
から値を持つことです。2 つ目は、開始するインスタンス化されたNSString
オブジェクトがあり、その後上書きされました。
結局、両方の文字列オブジェクトは同じですが、明らかに 2 番目のケースではリソースを浪費しています。