Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Let与内存分配_Ios_Swift - Fatal编程技术网

Ios Let与内存分配

Ios Let与内存分配,ios,swift,Ios,Swift,我在Swift中搜索Objective-Cdefine等价物,很多人告诉我使用let 我需要一个类中有很多常量,并且需要从这个类中创建很多对象,因此我认为使用let而不是define会浪费太多内存 我错了吗?也许让以不同的方式工作。 有没有一种方法可以在不浪费内存的情况下实现这一点?通常,let应该比#define浪费更少的内存(和其他资源)。因为想象你有 #define SOME_PATH [[[@"/" stringByAppendingPathComponent:@"foo"] strin

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

我需要一个类中有很多常量,并且需要从这个类中创建很多对象,因此我认为使用
let
而不是
define
会浪费太多内存

我错了吗?也许
以不同的方式工作。

有没有一种方法可以在不浪费内存的情况下实现这一点?

通常,
let
应该比
#define
浪费更少的内存(和其他资源)。因为想象你有

#define SOME_PATH [[[@"/" stringByAppendingPathComponent:@"foo"] stringByAppendingPathComponent:@"bar"] stringByAppendingPathComponent:@"buz"]
在任何地方,您都将使用
某些路径
,它将重新计算并为此创建一个新的
NSString*
(加上一些临时路径)

利用

let SOME_PATH = "foo".stringByAppendingPathComponent("bar").stringByAppendingPathComponent("buz")

它将执行一次计算来构建字符串,并且只需要一块内存(在构建字符串时,会创建一些临时对象,这些临时对象会很快被丢弃)

因此,您可以随时免费使用
let
常量。每次使用
#define
d宏时都会产生成本


请记住,您可以在全局范围内使用
let
。因此,
let
不仅在函数或类中工作,还可以使用
let
定义全局常量。通常,
let
\define
浪费的内存(和其他资源)要少得多。因为想象你有

#define SOME_PATH [[[@"/" stringByAppendingPathComponent:@"foo"] stringByAppendingPathComponent:@"bar"] stringByAppendingPathComponent:@"buz"]
在任何地方,您都将使用
某些路径
,它将重新计算并为此创建一个新的
NSString*
(加上一些临时路径)

利用

let SOME_PATH = "foo".stringByAppendingPathComponent("bar").stringByAppendingPathComponent("buz")

它将执行一次计算来构建字符串,并且只需要一块内存(在构建字符串时,会创建一些临时对象,这些临时对象会很快被丢弃)

因此,您可以随时免费使用
let
常量。每次使用
#define
d宏时都会产生成本


请记住,您可以在全局范围内使用
let
。因此,
let
不仅仅在函数或类中工作,您还可以使用
let
\define
定义全局常量。define
不应用于常量。“要精确构建字符串一次”且惰性地(如果是全局的),因此如果您从不使用该值,它永远不会被计算,也永远不会被分配到第一个位置。“只构建一次字符串”并且是惰性的(如果是全局的),因此如果您从未使用该值,它将永远不会被计算,也永远不会被分配到第一个位置。