关于objective-c的编程概念

Dhr*_*dal 1 objective-c ios

我对编程很困惑.如果我们在objective-c中执行此操作,它在内存方面有何不同:

+(NSString *)getName {
  NSString *name = @"Hello";
  return name;
}

OR

+(NSString *)getName {
  return @"Hello";
}
Run Code Online (Sandbox Code Playgroud)

两者在速度和性能方面是否相同或有何不同?

Dar*_*ust 8

编译器会将第一个示例优化为第二个示例,因为该变量不用于其他任何内容.所以他们是等价的:没有更快,没有人节省任何内存.

编辑:

所以,我实际上尝试了它并比较了汇编器输出.

使用的代码:

@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.但是,如果启用了优化,它们是等效的,并产生相同的代码.