让和内存分配

Gna*_*amm 0 ios swift

define在Swift 中搜索一个Objective-C 等价物,很多人告诉我使用它let.

我需要在一个类中有很多常量,我需要从这个类中创建很多对象,所以我认为我会浪费太多的内存let而不是define

我错了吗?也许let以不同的方式工作.有没有办法在不浪费记忆的情况下实现这一目标?

Joh*_*iss 6

一般来说,let应该浪费的内存(和其他资源)要得多#define.因为想象你有

#define SOME_PATH [[[@"/" stringByAppendingPathComponent:@"foo"] stringByAppendingPathComponent:@"bar"] stringByAppendingPathComponent:@"buz"]
Run Code Online (Sandbox Code Playgroud)

在任何地方,你将使用SOME_PATH,它将重做计算并NSString *为此创建一个新的(加上一些临时的).

通过使用

let SOME_PATH = "foo".stringByAppendingPathComponent("bar").stringByAppendingPathComponent("buz")
Run Code Online (Sandbox Code Playgroud)

它将进行计算以完全构建一次字符串,它只需要一块内存(在构建字符串时,会创建一些快速丢弃的临时对象).

因此,您可以根据需要随意使用let常量.该d宏会产生费用每次使用它的时间.#define

请记住,您可以let在全球范围内使用.因此let,不仅可以在函数或类中工作,还可以使用定义全局常量let.