Cocoa类别中的静态变量

时间:2010-07-28 06:56:48

标签: objective-c cocoa

我有一个可可'类别'用于向NSString添加变形(复数,单数化等)。该代码需要将一组正则表达式规则和异常从PLIST加载到字典和数组中,以及从代码中添加手动异常。我需要一种方法来保持这些数据结构(作为类成员)在多次调用变形代码(所有实例方法)之间。我试过了:

+ (NSMutableArray *)uncountables 
{
    static NSMutableArray *uncountables = nil;
    if (uncountables == nil) uncountables = [NSMutableArray array];
    return uncountables;
}

然而,它似乎偶尔会失败。这样做有好办法吗?如果可能的话,我不想继承NSString。感谢。

3 个答案:

答案 0 :(得分:5)

[NSMutableArray array];

返回一个自动释放的数组。请改用:

[[NSMutableArray alloc] init];

答案 1 :(得分:0)

我认为这段代码没问题。我对单身人士使用同样的东西。但请注意,这种方式不是线程安全的。也许你是从不同的线程调用它?

答案 2 :(得分:0)

如前所述,[NSMutableArray array];返回一个自动释放的数组。但我不认为,返回非自动释放的数组是一个好主意,因为它与Cocoa内存管理概念相矛盾 - 只应手动释放alloc,copy和new。所有其他初始化都是自动释放的。

所以,你应该使用

interface:
NSArray *a;

...somewhere in a code...
a = [[NSString uncountables] retain];
...

- (void)dealloc {
    [a release];
}

获取正确保留/释放的对象。