如何使用 NSArray 作为全局常量?

2024-03-14

我正在使用一组Constant.m文件,每个目标一个,用于为每个目标定义特定的内容。例如:

// Constants.h
extern NSString * const kDatabaseFileName;
//Constants.m
NSString * const kDatabaseFileName = @"target_one.sqlite";

我还想为每个目标定义一个 NSArray:

NSArray * const kLabelNames = [[NSArray alloc] initWithObjects:
    @"nameLabel", @"addressLabel", nil];

但这给出了“错误:初始化器元素不是常量”。使用“arrayWithObjects”也不起作用。这是因为我的数组中的字符串不是常量吗?

如何将数组设置为全局常量?谢谢。


在 Objective-C 中,对象只能在堆中分配,因此无法在静态内存中创建 NSArray。但是,您可以创建一个指向 NSString 常量的指针的 C 数组,如下所示......

NSString * const kLabelNames[] = {
    @"Foo", @"Bar", @"Baz"
};

...然后你可以编写像这样的类方法...

+ (NSArray *)labelNames
{
    static NSArray *names;
    if (names == nil) {
        names = [[NSArray alloc] initWithObjects:kLabelNames count:3];
    }
    return names;
}

Edit

请注意,随着 ARC、Grand Central Dispatch 和新的数组文字语法等新技术的引入,现在有一种更直接的方法来完成类似的事情。请注意,下面的示例还提供了更高的线程安全性,尽管原始示例可以合并@synchronized块或其他几种机制之一,以达到类似的结果。

+ (NSArray *)labelNames
{
    static NSArray *names;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        names = @[@"Foo", @"Bar", @"Baz"];
    });

    return names;
}

然而,上面的例子并没有完全解决最初的问题。如果确实需要全局常量数组,则可以按照与原始答案类似的方式重写前面的示例,同时仍然利用 GCD:

NSString * const kLabelNames[] = {
    @"Foo", @"Bar", @"Baz"
};

+ (NSArray *)labelNames
{
    static NSArray *names;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        names = [NSArray arrayWithObjects:kLabelNames count:3];
    });

    return names;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 NSArray 作为全局常量? 的相关文章

  • MPMoviePlayerController 的工具栏上有一个自定义按钮

    您可能在 iPhone 中通过 YouTube 观看过视频 普通 MPMoviePlayerController 有上一个 下一个和播放 暂停按钮 Youtube 播放器上有两个额外的按钮 gt 添加到左侧的收藏夹 gt 通过电子邮件发送右
  • AVMutableComposition - 导出错误的视频转换

    导出 VideoAsset 后 问题 视频方向是不是原始变换 导出视频层似乎总是景观 尝试去 变换视频层方向 旋转至原始方向 视频层大小 使其全屏尺寸 按原始方向 一些注意事项 videoAsset 的 CGRect 从一开始就是相反的 a
  • pdf文件文本阅读和搜索

    我想从 pdf 文件中读取文本并将文本搜索到 pdf 文件中 这是我知道的链接 这些都帮不了我 使用 Quartz 2D 解析 pdf 时获取文本位置 https stackoverflow com questions 3627745 ge
  • 确定第三方应用程序在 iPhone 上播放的歌曲

    我正在尝试确定 iPhone 上当前正在播放的歌曲的标题 我知道如果本机 Apple 应用程序正在播放音乐 我可以使用以下代码来找出正在播放的内容 但如果从 Spotify 或其他音乐播放应用程序播放歌曲 我如何找到歌曲的标题 MPMedi
  • 如何在 PHP 中对数组和数据进行排序?

    这个问题旨在作为有关 PHP 中数组排序问题的参考 人们很容易认为您的特定案例是独特的并且值得提出新问题 但大多数实际上只是此页面上的解决方案之一的微小变化 如果您的问题因与此问题重复而被关闭 请仅在您能解释为什么它与以下所有问题显着不同的
  • ruby 中的数组切片返回不同的结果 - nil 与空数组

    我对以下事实感到困惑 如果对数组进行切片length 它返回一个空数组 但长度大于该值时 它返回nil 这是什么原因呢 例如 arr 1 2 3 4 5 这样做 在哪里y gt arr length and x是任意正整数 返回nil ar
  • 如何在操作表中添加日期选择器?

    IBAction showCatPicker if self catList nil self catList nil catList release self catList NSMutableArray alloc init self
  • 合并两个对象数组并根据对象内部存在的键更新对象

    我有两个数组对象 array1 和 array2 我想根据键名合并数据 array1 name adam data name eve data child secondchild array2 name adam data
  • 目标操作 uicontrol 事件

    我一定在这里遗漏了一些明显的东西 但是 UIControl有一个方法 void addTarget id target action SEL action forControlEvents UIControlEvents controlEv
  • 为什么我的 x 轴在 iPhone 上不显示核心图?

    编辑 我认为我的问题更好地表述为 我怎样才能有一个不从零开始的 Y 轴 看起来 x 轴总是放置在 y 0 处 但我希望 x 轴位于 y 轴上的某个正数 这是一张包含更多常规数据的图表 我只是希望将 x 轴放置在绘图的最小 y 值 大约 77
  • 如何在 iOS 中通过 3G 连接创建无线热点

    如果我愿意 我将如何创建一个像这样的应用程序MyWi http intelliborn com mywi html 即 WiFi 网络共享应用程序 实现该功能需要哪些步骤 我需要使用哪些框架 库 我们的目标不是尝试将此应用程序放入应用程序商
  • 如何将媒体附件添加到 iOS 10 应用程序中的推送通知中?

    有多个示例 您应该如何设置项目来添加使用 媒体附件 技术来显示图像的丰富通知 我已经阅读了其中的大部分内容 但我错过了一些内容 因为我的项目没有使用此有效负载显示任何丰富的通知 使用 APNS Tool 和 Boodle 进行测试 aps
  • UIWebView stringByEvaluatingJavaScriptFromString 在后台

    在 iOS 应用程序中 我正在运行一个相当大的脚本UIWebView using stringByEvaluatingJavaScriptFromString 就 JavaScript 字符串的长度而言较大 调用 JavaScript 后会
  • 动态框架中未定义的架构符号

    我正在开发一个 iOS 框架 该框架包含多个第三方框架并使用 UnitySendMessage C 方法与 Unity 进行通信 我想创建一个动态框架 支持 iOS8 但我偶然发现以下编译错误 Undefined symbols for a
  • 在仅包含键的字符串的嵌套数组中查找值

    我有一个数组 其中包含一些设置 基本上如下所示 defaults array variable gt value thearray gt array foo gt bar myvar gt array morevars gt moreval
  • 如何在一列中存储数组或多个值

    运行 Postgres 7 4 是的 我们正在升级 我需要将 1 到 100 个选定项目存储到数据库的一个字段中 98 的情况下 只会输入 1 个项目 而 2 的情况下 如果是这样的话 会输入多个项目 这些项目只不过是文本描述 截至目前 长
  • 使用 MKPolyline 在地图上绘制用户路线

    我对 Objective c 还很陌生 在我的应用程序中 我试图将用户采取的路线绘制到地图上 到目前为止 这是我仅获取用户当前位置的内容 import StartCycleViewController h import CrumbPath
  • iOS7 无法隐藏状态栏

    我刚刚将我的 iPhone 5 iOS 7 升级到了四个测试版 现在 当我在这台 iPhone 上通过 Xcode 5 运行我的应用程序时 状态栏不会隐藏 尽管它应该隐藏 不工作 UIApplication sharedApplicatio
  • iPhone签名捕捉

    是否可以通过电缆 USB 连接将签名从 iPhone 传输到 xls 文件 因此 这可能不完全是您正在寻找的内容 但这就是我捕获用户 用手指 手写笔 绘制的签名的方式 您的 UIImageView 将具有绘制的签名 我没有考虑过如何将签名图
  • iOS 中的视频可以进行反卷积吗?

    我想拍摄击球手挥动棒球的镜头 但球棒很模糊 视频为 30 fps 通过研究 我发现反卷积似乎是最小化运动模糊的方法 但我不知道是否或如何在我的 iOS 应用程序后处理中实现它 我希望有人能给我指出正确的方向 比如如何在 iOS 中应用反卷积

随机推荐

  • 对重复内容不显示是否会影响 SEO/语义?

    重复内容上的 Display none 是否会影响 SEO 语义 假设您正在构建一个移动优先的响应式网站 在较小的断点处 您选择显示页面的标题标语 h1 在主要英雄横幅中 但是 稍后您希望在同一位置显示公司徽标 并在子横幅中显示您的口号 例
  • 如何获取使用 Angular $http 下载的文件的名称?

    我编写了使用 Angular http 下载文件的代码 文件的名称是notURL 中指定 URL 包含文件的唯一标识符 该标识符是从应用程序外部获取的 When http get myUrl 被调用 一切正常 文件已被检索 我可以在回调处理
  • Java 中动态转换为泛型类型

    这是我整理的一个简单的例子 private static
  • 使用 WPF 视觉层的高性能图形

    我正在创建一个 WPF 映射程序 该程序可能会同时加载数百个文件并将其绘制到屏幕上 并且用户可能想要缩放和平移此显示 其中一些文件类型可能包含数千个点 这些点很可能作为某种路径连接 其他支持的格式包括 TIFF 文件 使用一个绘制所有数据的
  • Stripe API - 收据列表

    我正在使用 Stripe API 我想向客户展示他们的发票历史记录列表以及相关收据 我在 Stripe API 中找不到任何地方 https stripe com docs api lang php https stripe com doc
  • PHP 会话很难跨分布式系统扩展吗?

    在工作中 我们几乎用 Java 和 Perl 完成所有工作 但我想使用 PHP 和会话构建一个功能 有些人认为尝试在我们的系统上进行 PHP 会话是一个坏主意 因为它分布到许多服务器 具体问题会是什么 您还可以使用自定义会话保存处理程序 h
  • 如何在条件查询中使用MAP的键?

    我有一个这样的豆子 Class TestA Map
  • 构建 python 模块并将其链接到 MacOSX 框架

    我正在尝试在 MacOSX 10 6 上构建 Python 扩展并将其链接到多个框架 仅限 i386 我使用 distutils 和 Extension 对象创建了一个 setup py 文件 我为了链接我的框架 我的LDFLAGS环境变量
  • Imshow 和 imwrite 在 matlab 中显示空白图像

    我正在尝试将图像存储在数组中以进行一些分析 当我循环该过程并将结果 imwrite 到各种文件中时 它会存储一个空白图像 与 imshow 相同 当我在控制台上打印图像数组时 这些值是它们应该的值 从 50 到 200 不等 这是我的代码出
  • 如何发出 SOAP 请求

    我正在 Android 中发出 SOAP 请求 我到底想要实现的是
  • WiX - 未定义的预处理器变量“$(var.SetupProject1.TargetDir)”

    我正在跟进本教程 http www paulsodimu co uk Post How To Create a Wix Installer For a Console Application创建 WiX 安装程序VS2017 Winform
  • 应用程序初始化非常慢:FirebaseApp初始化失败

    我知道关于这个问题 https stackoverflow com questions 37321728 firebaseinitprovider firebaseapp initialization unsuccessful但我认为这对我
  • 将本地 Nuget 包导入 Visual Studio 解决方案[重复]

    这个问题在这里已经有答案了 我的桌面上保存了一个 nuget 包文件 nupkg 我正在尝试将其纳入我的 Visual Studio 解决方案中 有谁知道如何做到这一点 请按照以下步骤操作 从 Visual Studio 打开项目的解决方案
  • 为什么 -O3 GCC Optimization 没有内联这个函数?

    在GCC编译器中 每当标记 O3时 编译器主要通过循环展开和函数内联进行优化 但是 当我编译具有以下函数的应用程序时 它没有执行函数内联 从 gprofing 和 gconving 中我可以注意到这个函数 comp t delay 不是从这
  • 如何使用默认的 Android 绘图

    使用默认 Android 可绘制对象时的最佳方法是什么 我应该使用android R drawable或者我应该复制项目中的可绘制对象并使用R drawable 在较新版本的 Android 中 某些默认可绘制对象被删除或调整大小是否存在任
  • 与主题属性的数据绑定

    我正在尝试新的 Android数据绑定库 https developer android com tools data binding guide html我想使用绑定设置工具栏的背景颜色 默认情况下 颜色应为 colorPrimary 来
  • 使用GCC编译时还需要使用-fPIC吗?

    在 gcc 目标机器上 当想要编译共享库时 需要指定 fpic 或 fPIC 才能正确工作 这是因为默认情况下使用绝对寻址 这适用于完全控制自己的地址空间的可执行文件 但不适用于共享库 共享库可以加载到可执行文件地址空间中的任何位置 然而
  • MVC / ASP.Net 记录级授权最佳实践

    有人对在 ASP Net MVC 网站中执行记录级授权同时保持关注点分离的好方法有什么建议吗 使用PrincipalPermission 您可以使用以下方法修饰方法 PrincipalPermission SecurityAction De
  • 关闭python请求连接

    import requests requests get path url timeout 100 在 python requests 库的上述用法中 一旦 requests get 运行完毕 连接是否会自动关闭 如果没有 我如何确定连接已
  • 如何使用 NSArray 作为全局常量?

    我正在使用一组Constant m文件 每个目标一个 用于为每个目标定义特定的内容 例如 Constants h extern NSString const kDatabaseFileName Constants m NSString co