2

私はObjective-Cを勉強しています。これらの NSString 宣言の違い (ある場合) を教えてください。

NSString *firstString;
firstString = @"First string";

NSString *secondString = [NSString string];
secondString = @"Second string";
4

2 に答える 2

8

2 つ目は 2 つの文字列を作成し、最初の文字列を使用せずに破棄します。この行で:

NSString *secondString = [NSString string];

新しい文字列を作成していますが、これは空であるためあまり役に立ちません。それを に割り当てていますsecondString次に、別の文字列 ( @"Second String") を に割り当てていますsecondString

これを行う必要はありません。どちらの場合でも、次のように記述できます。

NSString *myString = @"MyString";

この構文は文字列リテラル@"Some string here"と呼ばれ、コード内で実際の値を使用して NSString を指定するための省略形です。

于 2012-08-21T14:35:09.153 に答える
1

最終結果として違いはありません。

最初の文字列が宣言され、文字列リテラル構文を介して値が割り当てられます ( NSNumbersXcode 4.4 以降でもこれを行うことができます)。

2 つ目は、文字列 (空) として初期化され、別の NSString オブジェクトが割り当てられています。この場合、実際には 2 つの NSString オブジェクトが作成されており、前者[NSString string]は後者によって上書きされています。@"string value"

したがって、最初のものは最初nilから値を持つことです。2 つ目は、開始するインスタンス化されたNSStringオブジェクトがあり、その後上書きされました。

結局、両方の文字列オブジェクトは同じですが、明らかに 2 番目のケースではリソースを浪費しています。

于 2012-08-21T14:34:45.770 に答える