【问题标题】:Global Variables in Objective CObjective C 中的全局变量
【发布时间】:2010-06-29 10:52:54
【问题描述】:

我有一个计数器,用于在该计数器索引处获取一个对象,我需要在另一个类中访问它。

Objective C 中如何声明静态变量?

【问题讨论】:

    标签: objective-c variables static


    【解决方案1】:

    与其将其设为全局,不如让一个类访问另一个类的计数器,或者让两个类共享拥有计数器的第三个类:

    ClassA.h:
    @interface ClassA {
        int counter;
    }
    @property (nonatomic, readonly) int counter;
    
    ClassA.m
    @implementation ClassA
    @synthesize counter;
    
    ClassB.h:
    #import "ClassA.h"
    @interface ClassB {
        ClassA *a;
    }
    
    ClassB.m:
    @implementation ClassB
    - (void)foo {
        int c = a.counter;
    }
    

    【讨论】:

    • 使用属性。 @synthesise 它应该就足够了,免去你写一个微不足道的 getter 的麻烦。
    • 我试过这个,我不知道如何在其他类中访问它。如果我尝试静态,它也说未声明这真的很令人沮丧,这是一个我无法完成的简单任务,因为我是 obj-c 的新手。请提供代码示例。
    • 我用静态方法解决了,不用担心。再次感谢。
    • 非常感谢您的编辑。就内存而言,做静态技术不是更好吗?问候
    • @alJaree 内存消耗(或其他)根本不应该成为问题。您应该注意,在 Marcelo 的解决方案中,计数器是一个实例成员。这意味着,ClassA 类的每个实例都有自己的计数器副本,而在我的解决方案中,整个类只存在一个计数器,该计数器由该类的所有实例共享。
    【解决方案2】:

    嗨,alJaree,
    您在您的类的实现中声明一个静态变量,并通过静态访问器启用对它的访问:

    some_class.h:
    @interface SomeClass {...}
    + (int)counter;
    @end
    
    some_class.m: 
    @implementation SomeClass
    static int counter;
    + (int)counter { return counter; }
    @end

    【讨论】:

    • 谢谢,但我如何在其他课程中使用它?我只是收到一个“未声明”的错误。
    • 你必须#import "some_class.h" 进入每个使用计数器的实现文件。
    • @alJaree 这或多或少与 java 中具有公共静态成员的类“等效”。正如 Paul 正确指出的那样,您必须导入它,然后通过 [SomeClass counter] 访问它。另一种方法是在头文件中声明一个全局变量(就像在 c 中所做的那样),但 Marcelo 已经建议使用这种方法,我认为从 OO 的角度来看它更干净。
    • 如何更改其他类中的静态成员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多