【问题标题】:Is there a way to allocate an Objective-C NSArray with objects contained in a C-style macro?有没有办法用 C 风格的宏中包含的对象分配一个 Objective-C NSArray?
【发布时间】:2011-08-17 22:49:38
【问题描述】:

我想做的是这样的:

NSArray *someArray = [[NSArray alloc] initWithObjects: C_MACRO, nil];

由于 C_MACRO 部分是一个外围文件,它使用 #define 列出一些 NSString,因此当我需要更改填充数组的字符串对象时,我可以方便地在一个文件中进行。到目前为止,这似乎是不可能的。不过话说回来,我是新手。

有大神指教一下吗?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    这样做没问题...宏只是文本替换。

    /* foo.h */
    #define C_MACRO @"foo", @"bar"
    
    /* bar.m */
    #import "foo.h"
    NSArray * someArray = [ [ NSArray alloc ] initWithObjects: C_MACRO, nil ];
    

    请注意,您可以在另一个宏中使用宏。所以

    #define FOO_STR @"foo"
    #define BAR_STR @"bar"
    #define STR_LIST FOO_STR, BAR_STR
    

    另一种方法是将字符串分配在 .m 文件中,并在公共头文件中声明为 extern。如果必须共享同一对象的唯一实例,则非常方便。

    /* foo.h */
    extern NSString * const fooStr;
    extern NSString * const barStr;
    
    /* foo.m */
    NSString * const fooStr = @"foo";
    NSString * const BarStr = @"bar";
    

    【讨论】:

      【解决方案2】:

      为什么它必须是宏?以下也同样有效:

      NSString *words[] = {@"Hello", @"World!"}; // this can be a global
      ...
      NSArray *array = [NSArray arrayWithObjects:words count:sizeof(words)/sizeof(*words)];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 2011-11-28
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多