iOS版。多个类中具有相同名称的不同静态变量?

时间:2014-09-30 09:20:58

标签: ios static non-static

我需要这样的东西:

.h文件:

@interface A : UIViewController
- (void)setCount:(int)c;
- (int)getCount;
@end

@interface B : A
@end

@interface C : A
@end

.m文件

@implementation A
- (void)setCount:(int)c {...}
- (int)getCount {...}
@end

@implementation B
static int count = -1;
@end

@implementation C
static int count = -1;
@end

但是在{B}和C类中未实现getCountsetCount:时,此代码无效。问题:

  • 在每个类中实现这两个方法不太合适,因为我的应用程序中有很多类;

  • 我不能在A类中声明一个静态变量,因为它对每个子类都是相同的

  • 变量应该是静态的,因为我需要在alloc / dealloc调用之前存储它的值

有什么想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您可以在每个源文件中或每个范围内使用一个具有给定名称的静态对象。 @implementation并不重要。因此,如果您的代码位于一个源文件中,那么它就是非法的。如果@implementations在两个不同的源文件中,你没问题。如果静态变量在不同的范围内,你就可以了。例如

- (NSInteger)countBools:(BOOL)aBool
{
    if (aBool)
    {
        static NSInteger count;
        return ++count;
    }
    else
    {
        static NSInteger count;
        return ++count;
    }
}

将正常工作,返回一个计数器,每次使用YES调用方法时增加,另一个计数器在每次使用NO调用方法时增加。

答案 1 :(得分:0)

谢谢,你激励我找到更好的解决方案。我无法避免在每个类中声明一个静态变量,但我可以使这个过程更加简单。

我在#define中声明了一个带有静态变量声明的A.h,并在每个子类中仅用一行来使用它。它不是很漂亮,但我也可以用一种简单的方式自由地声明与这个变量相关的所有方法(如果我需要它们)。