这些行都位于@implementation声明上方的实现文件中.

NSString * const aVar = @"aVarStringValue";

static NSString *aVar = @"aVarStringValue";

据我所知,第二个static只在应用程序的生命周期内分配一次,这一事实有助于提高性能.

但这是否意味着它本质上是一个内存泄漏,因为该内存块永远不会被释放?

而前const个声明是否每次被访问时都会被分配?

推荐答案

Objective-C(和C/C++)中的static关键字表示变量的可见性.静态变量(不在方法中)只能在该特定文件中访问.另一方面,静态局部变量只能分配一次.

另一方面,const表示不可修改和/或重新分配参考;并且在如何创建它上是正交的(不过编译器可能会优化常量).

值得一提的是,在应用程序的生命周期中,NSString个文本被初始化,并且永远不会被销毁.它们被分配到内存的只读部分.

Objective-c相关问答推荐

将 NSMutableAttributedString 转换为 NSString

pathForResource 返回 null

Objective-C 中的正式协议和非正式协议有什么区别?

将 NSNumber 转换为 NSDecimalNumber

go 掉 UISearchBar 下的 1px 边框

在 UILabel.attributedText *not* 蓝色和 *not* 下划线

如何在 XCode 4 中创建 dSYM 文件?

捕获组在 NSRegularExpression 中不起作用

块引用作为Objective-C中的实例变量

进入编辑模式时动画自定义绘制的 UITableViewCell

为什么是 [object doSomething] 而不是 [*object doSomething]?

如何删除应用程序可访问的所有 keys 串项目?

带有块的 Objective-C 延迟动作

以编程方式查找 iphone 的语言环境货币

AVAssetImageGenerator 提供旋转的图像

根据文本量更改 UITableViewCell 高度

如何在今天午夜获取 NSDate 对象?

哪个是正确的,nil 或 NULL,来标记没有 Objective-C 块?

如何在 Objective-c 中将数组声明为常量?

如何设置字体大小以填充 UILabel 高度?