模型1
NSString *name = (NSString *)[response valueForKey:@"name"];
[someObject doSomethingWith:name];
模型2
[someObject doSomethingWith:((NSString *)[response valueForKey:@"name"])];
如果我选择模型2会保存在堆栈上创建的变量还是在场景后面创建隐式临时变量?
忽略可读性的损失,避免创建仅在某个地方使用的变量有什么好处。而是直接传递它,如模型2?
答案 0 :(得分:3)
编译器生成的代码将是相同的,但是,在第二种情况下没有变量。变量是一种高级编程概念,生成的汇编代码只知道寄存器和存储器。在这两种情况下,最里面的方法调用的返回值需要存储在某处,因此堆栈中的寄存器或位置将用于此。
此外,id
(- [NSDictionary valueForKey:]
返回的内容)是通用的,并且与任何对象指针类型隐式兼容 - 请不要将其返回值强制转换为NSString *
。