Статический массив в объективе C
Я использую следующий код для создания открытого статического массива в С#
public class A{
public static array[] obj;
}
У меня есть другой класс B.
Из класса B я звонюA.ArrayName
, и я получаю массив, который я использую в классе А.
Я хотел знать, что эквивалентно этому в объективном C
Для этого нет специального синтаксиса. Вы просто определяете метод класса для возврата статического массива.
Например:
@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]
Я хочу предложить использование категории в 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]);
- Вопросы
- Objective-c
- Статический массив в объективе C