gpt4 book ai didi

Objective-C 静态类级别变量

转载 作者:IT老高 更新时间:2023-10-28 12:18:13 25 4
gpt4 key购买 nike

我有一个类 Film,每个类都存储一个唯一的 ID。在 C#、Java 等中,我可以定义一个静态 int currentID,每次设置 ID 时,我都可以增加 currentID,并且更改发生在类级别而不是对象级别。这可以在Objective-C中完成吗?我发现很难找到答案。

最佳答案

问题描述:

  1. 您希望 ClassA 有一个 ClassB 类变量。
  2. 您正在使用 Objective-C 作为编程语言。
  3. Objective-C 不像 C++ 那样支持类变量。

另一种选择:

使用 Objective-C 特性模拟类变量行为

  1. 在 classA.m 中声明/定义一个静态变量,以便它只能被 classA 方法(以及您放入 classA.m 中的所有内容)访问。

  2. 重写 NSObject 的初始化类方法,只用 ClassB 的实例初始化静态变量一次。

  3. 你会想,我为什么要覆盖 NSObject 的初始化方法。关于此方法的 Apple 文档给出了答案:“运行时恰好在程序中的每个类或从它继承的任何类从程序中发送其第一条消息之前一次向程序中的每个类发送初始化。(因此,该方法如果不使用该类,则可能永远不会被调用。)”。

  4. 在任何 ClassA 类/实例方法中随意使用静态变量。

代码示例:

文件:classA.m

static ClassB *classVariableName = nil;

@implementation ClassA

...

+(void) initialize
{
if (! classVariableName)
classVariableName = [[ClassB alloc] init];
}

+(void) classMethodName
{
[classVariableName doSomething];
}

-(void) instanceMethodName
{
[classVariableName doSomething];
}

...

@end

引用文献:

  1. Class variables explained comparing Objective-C and C++ approaches

关于Objective-C 静态类级别变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com