关于objective-c的编程概念

时间:2014-02-04 11:49:00

标签: ios objective-c

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

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

OR

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

两者在速度和性能方面是否相同或存在差异?

1 个答案:

答案 0 :(得分:8)

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

修改

所以,我实际上尝试过并比较了汇编程序输出。

使用的代码:

@implementation Test

- (NSString *)test1 {
        NSString *variable = @"Hello1";
        return variable;
}

- (NSString *)test2 {
        return @"Hello2";
}

@end

使用的编译器:

  

Apple LLVM 5.0版(clang-500.2.79)(基于LLVM 3.3svn)目标:   x86_64的-苹果darwin13.0.0

没有优化(-O0),test1确实拥有未使用变量(movq %rax, -24(%rbp)movq -24(%rbp), %rax的代码,因此需要另外一个内存写入和读取)。但是已经在-O1处对变量进行了优化(内部self_cmd变量的读取也是如此)。

换句话说:使用-O0(无优化),test1确实比test2慢。但是,如果开启优化,它们是等效的,并产生相同的代码。