ios - 如何在编译时生成变量声明?

标签 ios objective-c nsarray c-preprocessor metaprogramming

我想定义一个宏或其他一些可以在编译时生成类似变量声明的方法。例如。我想像这样声明 50 个 NSString 变量:#define VAR_GENERATOR (var_name, var_content) NSString* var_name = @"var_content" 并在 for 循环中执行:

for(NSString* string in [stringArray count])
  {     
       NSString* var_name = [NSString stringWithFormat: @"string%d", iteration];
       VAR_GENERATOR (var_name, string);
       iteration++;
      }

假设 [stringArray count] == 50 所以我想要像这样声明 50 个 NSString 变量:NSString* string1 = @"数组中的第一个字符串" 等等...

那么有一些预处理器方法可以实现这一点吗?或者在 Objective-C 中可能有其他一些更优雅、更灵活的编译时元编程工具?

最佳答案

出于多种原因,使用编译时结构无法完成您想做的事情;

根本原因是var_name的内容在编译时是未知的,所以编译器根本不可能知道这个变量应该取什么名字。但即使是这样,变量名冲突又如何呢?假设局部变量的数量未知,如果编译器允许,堆栈布局会是什么?

请允许我补充一点,即使 如果您能够做到这一点,那么您的变量将在本地范围内声明,并且无法在您的之外访问 循环。

在您的位置,我会尝试回到您真正想要完成的事情,并思考是否需要运行时构造。

如果答案是肯定的,(您是否正在尝试为某种语言构建解释器?),那么我们就有了将任意名称映射到值的工具,例如 NSMutableDictionnarystd: :map.

长话短说: ,也许您可​​以稍微扩展一下您想要完成的目标。

关于ios - 如何在编译时生成变量声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20162905/

相关文章:

ios - 删除 iCloud 数据不会清除 NSUbiquitousKeyValueStore?

ios - iOS 中 JSON 解析中的 TableView 中未显示图像

iphone - 解码字符串时获取垃圾和特殊字符

iphone - 如何在 Xcode 中为 iPhone 应用程序创建我自己的包

ios - 将字典对象附加到 UITableViewCell

objective-c - 在 obj-c 中与 NSArray 一起使用的长度混淆

iphone - 目标日期 2 天前的 NSNotification

ios - Swift Firebase Like Post in Table View

iphone - @synchronized如何工作? [复制]

iphone - 如何访问 NSArray 中的某个值?