0

モデル1

NSString *name = (NSString *)[response valueForKey:@"name"];
[someObject doSomethingWith:name];

モデル 2

[someObject doSomethingWith:((NSString *)[response valueForKey:@"name"])];

モデル 2 を選択した場合、スタック上に作成された変数を保存しますか、それとも背後で作成された暗黙の一時変数を保存しますか?

読みやすさの損失を無視して、その場所でのみ使用される変数の作成を回避することには利点があります。代わりに、モデル 2 のように直接渡しますか?

4

1 に答える 1

3

コンパイラによって生成されるコードは同じですが、2 番目のケースには変数がありません。変数は高レベルのプログラミング概念であり、結果のアセンブリ コードはレジスタとメモリのみを認識します。どちらの場合も、最も内側のメソッド呼び出しの戻り値をどこかに格納する必要があるため、そのためにレジスタまたはスタック上の場所が使用されます。

また、id(- [NSDictionary valueForKey:]戻り値) はジェネリックであり、任意のオブジェクト ポインター型と暗黙的に互換性があります。その戻り値を にキャストしないでくださいNSString *

于 2013-03-29T05:57:25.720 に答える