Ios Let与内存分配
我在Swift中搜索Objective-CIos Let与内存分配,ios,swift,Ios,Swift,我在Swift中搜索Objective-Cdefine等价物,很多人告诉我使用let 我需要一个类中有很多常量,并且需要从这个类中创建很多对象,因此我认为使用let而不是define会浪费太多内存 我错了吗?也许让以不同的方式工作。 有没有一种方法可以在不浪费内存的情况下实现这一点?通常,let应该比#define浪费更少的内存(和其他资源)。因为想象你有 #define SOME_PATH [[[@"/" stringByAppendingPathComponent:@"foo"] strin
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
不应用于常量。“要精确构建字符串一次”且惰性地(如果是全局的),因此如果您从不使用该值,它永远不会被计算,也永远不会被分配到第一个位置。“只构建一次字符串”并且是惰性的(如果是全局的),因此如果您从未使用该值,它将永远不会被计算,也永远不会被分配到第一个位置。