我对编程很困惑.如果我们在objective-c中执行此操作,它在内存方面有何不同:
+(NSString *)getName {
NSString *name = @"Hello";
return name;
}
OR
+(NSString *)getName {
return @"Hello";
}
Run Code Online (Sandbox Code Playgroud)
两者在速度和性能方面是否相同或有何不同?
编译器会将第一个示例优化为第二个示例,因为该变量不用于其他任何内容.所以他们是等价的:没有更快,没有人节省任何内存.
编辑:
所以,我实际上尝试了它并比较了汇编器输出.
使用的代码:
@implementation Test
- (NSString *)test1 {
NSString *variable = @"Hello1";
return variable;
}
- (NSString *)test2 {
return @"Hello2";
}
@end
Run Code Online (Sandbox Code Playgroud)
使用的编译器:
Apple LLVM 5.0版(clang-500.2.79)(基于LLVM 3.3svn)目标:x86_64-apple-darwin13.0.0
没有优化(-O0),test1确实有未使用的变量的代码(movq %rax, -24(%rbp)并且movq -24(%rbp), %rax,所以一个额外的内存写和读).但是已经-O1对变量进行了优化(如内部self和_cmd变量的读取).
换句话说:用-O0(没有优化),test1确实比慢test2.但是,如果启用了优化,它们是等效的,并产生相同的代码.