【问题标题】:So very lost on initializing const objects在初始化 const 对象时非常迷失
【发布时间】:2011-08-17 17:41:40
【问题描述】:

我已经尝试过很多次来理解 const 关键字,但它对我来说并不奏效。

我要声明一个不能改变的对象,也就是说,一个常量对象。例如在.h文件中:

extern MyClass *use_this_object;

在 .m 文件中:

MyClass *use_this_object;

+ (void) Initialize {
  use_this_object = [MyClass new];
}

现在,我可以在哪里放置一个 const 以便其他类可以访问 use_this_object 但不能修改它(假设 MyClass 是不可变的),而 MyClass 类可以初始化变量?

这甚至可能吗?或者我应该使用静态方法来检索常量而不是在外部声明它?

【问题讨论】:

  • 好吧,我认为它也可能适用于 C,因为它们在许多方面都非常相似。但显然不是这种情况。

标签: objective-c constants


【解决方案1】:

Objective-C 中没有“const 对象”这样的东西。有 const pointers 和不可变对象。您正在谈论的是指向不可变对象的 const 指针,但您不能在运行时分配它们。

对于可以在编译时分配的对象(我只知道一个,NSString),你可以这样做:

NSString * const kMyString = @"string";

这是一个指向(不可变的)NSString 的常量指针。您从右到左阅读这些内容。

要创建您想要的,您需要一个带有内部static 的函数或方法,如下所示:

+ (Something *)something {
  static Something *something = nil;
  if (! something) {
      something = [Something new];
  }
  return something;
}

这比使用全局变量更可取,而不是真正的常量(如字符串和整数)。

您可以确保Something 是不可变的。

EDIT 只是关于上述代码的注释。这只是如何在运行时创建静态对象的示例。有很多方法可以通过各种权衡来做到这一点,包括使用 +initialize 和静态文件(这是我目前创建单例的首选方式)。不要把上面的代码作为唯一的方法。这只是最接近const 的方式,因为程序的其他部分无法直接获取指针。

【讨论】:

    【解决方案2】:

    我会使用静态方法,看起来更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 2015-08-01
      • 2011-10-31
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多