【问题标题】:Static array in objective C目标 C 中的静态数组
【发布时间】:2012-01-15 16:04:14
【问题描述】:

我使用以下代码在 C# 中创建一个公共静态数组

public class A{
    public static array[] obj;
}

我还有一个 B 级。 从B级我打电话 A.ArrayName 我得到了我在 A 类中使用的数组。

我想知道,在客观 C 中这个等价物是什么

【问题讨论】:

    标签: objective-c arrays cocoa static


    【解决方案1】:

    对此没有特殊的语法。你只需定义一个类方法来返回静态数组。

    例如:

    @implementation A // note this is in the implementation
    
    static NSArray *array;
    
    + (NSArray *)array
    {
      if (!array)
        array = [[NSArray alloc] init];
    
      return array;
    }
    
    @end
    

    或者对于更混乱的代码,但性能稍好(在紧密循环中是个好主意,但通常不值得):

    @implementation A
    
    static NSArray *array;
    
    + (void)initialize // this method is called *once* for every class, before it is used for the first time (not necessarily when the app is first launched)
    {
      [super initialize];
    
      array = [[NSArray alloc] init];
    }
    
    + (NSArray *)array
    {
      return array;
    }
    
    @end
    

    要从 B 类访问它,您只需:[A array]

    【讨论】:

    • 如果你需要线程安全初始化并且仍然想懒惰地做,dispatch_once() 是一个不错的选择。
    • 嗯,我从来没想过。好主意。
    【解决方案2】:

    我想建议在 NSArray 上使用类别。我稍微改变了你的要求,使用 NSMutableArray 作为共享对象。

    接口文件:

    #import <Foundation/Foundation.h>
    
    @interface NSArray (StaticArray)
    +(NSMutableArray *)sharedInstance;
    
    @end
    

    实现文件

    #import "NSArray+StaticArray.h"
    
    @implementation NSArray (StaticArray)
    
    +(NSMutableArray *)sharedInstance{
    
        static dispatch_once_t pred;
        static NSMutableArray *sharedArray = nil;
        dispatch_once(&pred, ^{ sharedArray = [[NSMutableArray alloc] init]; });
        return sharedArray;
    }
    @end
    

    现在您可以将其用作:

    [[NSArray sharedInstance] addObject:@"aa"];
    [[NSArray sharedInstance] addObject:@"bb"];
    [[NSArray sharedInstance] addObject:@"cc"];
    

    还有其他地方:

    NSLog(@"%@", [NSArray sharedInstance]);
    

    【讨论】:

      猜你喜欢
      • 2012-09-30
      • 2011-02-09
      • 1970-01-01
      • 2013-12-03
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多