【问题标题】:Initializing NSArray of numbers初始化 NSArray 的数字
【发布时间】:2012-02-25 02:23:44
【问题描述】:

我有一个只需要数字的非可变数组。我将如何初始化它?

我现在有它,但我认为必须有更好的方法。我们可以像在 C++ 中那样做吗?像 int list[5] = {1,2,3,4,5}; 这样的东西会对应用程序产生任何影响吗?

myArray = [[NSArray alloc] initWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];

另外,如果我需要一个只有数字的数组,它会是什么样子?我是 obj-c 的新手,在网上环顾四周,我看到了相互矛盾的答案。

【问题讨论】:

    标签: objective-c ios nsarray nsnumber


    【解决方案1】:

    还没有,但很快:

    http://blog.ablepear.com/2012/02/something-wonderful-new-objective-c.html

    更新:新语法是:

    @[ @(20), @(10) ]
    

    @[] 创建一个数组,@(number) 创建一个可以进入数组的 NSNumber。

    【讨论】:

      【解决方案2】:

      如果它是不可变的并且只包含数字,则直接使用 C 数组。在 Objective-C 中使用 C 数组没有任何问题,在您的情况下,NSArray 只是不必要的开销。

      【讨论】:

      • 谢谢,这就是我想要的。二维数组呢?我们也可以用 C 语法来做吗?
      【解决方案3】:

      你可以给 NSArray 添加一个类别:

      @implementation NSArray ( ArrayWithInts )
      
      +(NSArray*)arrayWithInts:(const int[])ints count:(size_t)count
      {
          assert( count > 0 && count < 100 ) ;    // just in case
      
          NSNumber * numbers[ count ] ;
          for( int index=0; index < count; ++index )
          {
              numbers[ index ] = [ NSNumber numberWithInt:ints[ index ]] ;
          }
      
          return [ NSArray arrayWithObjects:numbers count:count ] ;
      }
      @end
      

      countof() 看起来像这样:

      #define countof(x) (sizeof(x)/sizeof(x[0]))
      

      这样使用:

      const int numbers[] = { 20, 10, 5, 2, 1, 0 } ;  
      NSArray * array = [ NSArray arrayWithInts:numbers count:countof(numbers) ] ) ;
      

      或者你可以使用上面@CRD的建议......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        相关资源
        最近更新 更多