我在Swift中搜索Objective-C define
等价物,很多人告诉我使用let
。
我需要在一个类中有很多常量,我需要从这个类中创建很多对象,所以我认为使用let
代替define
我错了吗?也许let
以不同的方式运作。
有没有办法在不浪费记忆的情况下实现这一目标?
答案 0 :(得分:6)
通常,let
应该比#define
浪费很多少内存(和其他资源)。因为想象你有
#define SOME_PATH [[[@"/" stringByAppendingPathComponent:@"foo"] stringByAppendingPathComponent:@"bar"] stringByAppendingPathComponent:@"buz"]
无处不在,您将使用SOME_PATH
,它将重做计算并为其创建新的NSString *
(加上一些临时的)。
使用
let SOME_PATH = "foo".stringByAppendingPathComponent("bar").stringByAppendingPathComponent("buz")
它将进行计算以完全一次构建字符串,并且它只需要一块内存(在构建字符串时会创建一些临时对象)被迅速丢弃的。)
因此,您可以根据需要随时使用let
常量 。 #define
d宏每次使用时都会产生费用。
请记住,您可以在全局范围内使用let
。因此let
不仅可以在函数或类中工作,还可以使用let
定义全局常量。