【问题标题】:Declare public static variable in objective c [duplicate]在目标c中声明公共静态变量[重复]
【发布时间】:2014-03-04 09:19:48
【问题描述】:

我想要一个类的 .h 中的静态变量,并希望它被继承到它的子类。

@interface :UIViewController
static bool isSearchWindowOpen ; //something like this.
@end

如果我这样写:

static bool isSearchWindowOpen ; 
@interface :UIViewController
    @end

它工作正常,但不能被子类继承。

请建议。

【问题讨论】:

  • 接口声明中的冒号是什么? “继承”是什么意思?你想让变量可见还是想让每个(子)类引用它自己的变量?目前尚不清楚您要达到的目标。

标签: ios iphone objective-c


【解决方案1】:

这听起来有点像您将它与其他一些编程语言(如 C++)混淆了。在 Objective-C 中,就像 C 一样,静态变量是具有文件范围的变量。如果您在头文件中声明静态变量,则包括该头文件的任何源文件都有自己的静态变量副本。

你可能想要一个类方法

+ (BOOL)isSearchWindowOpen

实施

static BOOL sSearchWindowOpen;
+ (void)setSearchWindowOpen:(BOOL)open { sSearchWindowOpen = open; }
+ (BOOL)isSearchWindowOpen { return sSearchWindowOpen; }

编写检查搜索窗口是否打开的代码可能会更好,而不是依赖于必须始终正确跟踪的静态变量。

【讨论】:

    【解决方案2】:

    声明的变量与类无关。它是“C 意义上的”全局静态:只有同一文件中的代码才能访问它。 (See Wikipedia for details.) 你可以编写类访问器:

    static BOOL foo;
    
    + (void) setFoo: (BOOL) newFoo
    {
        foo = newFoo;
    }
    

    这样子类也可以访问该变量。但这无论如何都不是一个好主意。你想解决什么问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2012-09-05
      • 2015-03-27
      • 2014-12-03
      • 2011-11-30
      相关资源
      最近更新 更多