Статический массив в объективе C

141
17

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


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

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


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

спросил(а) 2021-01-19T16:32:44+03:00 6 месяцев назад
1
Решение
193

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


Например:


@implementation A // note this is in the implementation

static NSArray *array;

+ (NSArray *)array
{
if (!array)
array = [[NSArray alloc] init];

return array;
}

@end

Или для messier-кода, но немного лучше производительность (хорошая идея в жестком цикле, но обычно не стоит):


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

ответил(а) 2021-01-19T16:32:44+03:00 6 месяцев назад
109

Я хочу предложить использование категории в 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]);

ответил(а) 2021-01-19T16:32:44+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема