【发布时间】: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
我使用以下代码在 C# 中创建一个公共静态数组
public class A{
public static array[] obj;
}
我还有一个 B 级。
从B级我打电话
A.ArrayName 我得到了我在 A 类中使用的数组。
我想知道,在客观 C 中这个等价物是什么
【问题讨论】:
标签: objective-c arrays cocoa static
对此没有特殊的语法。你只需定义一个类方法来返回静态数组。
例如:
@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]
【讨论】:
我想建议在 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]);
【讨论】: