问题 定义Vs静态常量Vs NSString - 存储器的观点


什么是最好的赌注:

#define kYes @"Yes"

static NSString *const kYes = @"Yes";

NSString *kYes = @"Yes";

从内存消费的角度来看。请记住,应用程序中将有数千个常量。


7085
2018-03-30 08:03


起源

你意思是 #define kYes @"Yes"? - kennytm


答案:


从内存的角度来看 - 静态变量更好,因为它被引用一次。 #define会将字符串插入到所有出现的位置,通过它 - 乘以内存使用量...(除非GCC优化相同的常量字符串出现,它实际上可能。在这种情况下 - 没有区别)


11
2018-03-30 09:27



除非GCC优化相同的常量字符串出现  - 情况就是这样。 - kennytm
这是否意味着如果在10个地方使用#define,它将替换String并最终创建更多对象。例如:if([a isEqualToString:KYes]){} ... if([a isEqualToString:@“Yes”]){},1个对象。另一个地方我们初始化为NSString * status = KYes,这将是.. NSString * status = @“是”,第二个对象 - andyPaul