うまくいけばあなたの好奇心を和らげるための長い答え、そして好奇心を持つことは良いことです!パフォーマンスとメモリへの影響はゼロまたはごくわずかです。ポインタがどのように格納されているのか疑問に思います。入力するとき:
NSArray * monthsForChosenYear;
monthsForChosenYear
ローカルストレージに割り当てられる、名前で参照されるボックス(変数)を要求しています。このボックスは、囲んでいるメソッドが終了すると自動的に再利用され、コンパイラーがそれが不要であると判断した場合は、それよりも早く再利用される可能性があります。このボックスは、タイプの値を保持できますNSArray *
。
入力するとき:
NSArray * monthsForChosenYear = [self monthsForYear:newChosenYear];
あなたは2つのことを求めています、それは単に次の略記です:
NSArray * monthsForChosenYear;
monthsForChosenYear = [self monthsForYear:newChosenYear];
2行目はメソッドを呼び出し、戻り値を。という名前のボックスに格納しますmonthsForChosenYear
。最後に入力するとき:
[self setMonths: monthsForChosenYear];
ボックスに保存されている値monthsForChosenYear
がメソッドに渡されます。ボックスを使用しなくなった場合monthsForChosenYear
、コンパイラはボックスを再利用するか、囲んでいるメソッドの終了またはその他の適切なポイントまで待機する場合があります。
コンパイラはボックスの使用状況を分析して最適化しますが、ボックスが不要であると判断された場合でも、ボックスを割り当てない場合があります。ボックスを割り当てるコストはごくわずかです。
* [注:実際には通常、2種類のローカルボックスがあります。2つ目は、レジスタと呼ばれることが多く、割り当てコストは通常、微小よりもさらに小さくなります。どの種類のボックスを使用するかは、コンパイラによって決定されます。] *
入力するとき:
[self setMonths: [self monthsForYear:newChosenYear]];
1行で2つのメソッドを呼び出すように要求しており、内部呼び出し()から返された値を[self monthsForYear:newChosenYear]
外部呼び出しに渡す必要があります。コンパイラはこの結果をどこに保存しますか?コンパイラは事実上、上記を次のように変換します。
NSArray *compilerTemporaryBox = [self monthsForYear:newChosenYear];
[self setMonths:compilerTemporaryBox];
上記からあなたはそれがどうなるかを知っています。コンパイラには、必要な時間を知っているという小さな利点があるcompilerTemporaryBox
ため、それを理解する必要はありませんが、コンパイルされたコードには影響しません。
結局のところ、全体的な答えは、それをどのように書くかは問題ではないということです。
さらに、使用するメモリ管理のタイプ:MRC、ARC、またはGC。答えには影響しません-コンパイラは両方のバリアントを同じように扱うことになります。
だからあなたがあなたに最適だと思うスタイルを選びましょう。HTH。