存储到变量vs直接传递(这会隐式创建临时变量吗?)

时间:2013-03-29 05:52:09

标签: objective-c

模型1

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

模型2

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

如果我选择模型2会保存在堆栈上创建的变量还是在场景后面创建隐式临时变量?

忽略可读性的损失,避免创建仅在某个地方使用的变量有什么好处。而是直接传递它,如模型2?

1 个答案:

答案 0 :(得分:3)

编译器生成的代码将是相同的,但是,在第二种情况下没有变量。变量是一种高级编程概念,生成的汇编代码只知道寄存器和存储器。在这两种情况下,最里面的方法调用的返回值需要存储在某处,因此堆栈中的寄存器或位置将用于此。

此外,id- [NSDictionary valueForKey:]返回的内容)是通用的,并且与任何对象指针类型隐式兼容 - 请不要将其返回值强制转换为NSString *