Статический массив в объективе C - PullRequest
9 голосов
/ 08 декабря 2011

Я использую следующий код для создания открытого статического массива в C #

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

У меня есть другой класс B. Из вызова класса BI A.ArrayName, и я получаю массив, который я использую в классе A.

Я хотел знать, что эквивалентно этому в задаче C

Ответы [ 2 ]

18 голосов
/ 08 декабря 2011

Для этого нет специального синтаксиса.Вы просто определяете метод класса для возврата статического массива.

Например:

@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]

5 голосов
/ 08 декабря 2011

Я хочу предложить использовать категорию на 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]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...