【问题标题】:NSDictionary of uninitialized objects?未初始化对象的NSDictionary?
【发布时间】:2013-01-12 11:40:51
【问题描述】:

如何在NSDictionary 中存储未初始化的对象?

我想我会这样做,但我不确定这是一个好方法:

 NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
                     [MyObject1 alloc], @"myObject1",
                     [MyObject2 alloc], @"myObject2"
                     , nil];

MyObject1 *object = [dict objectForKey:@"myObject1"];

[object init];

任何帮助将不胜感激。

【问题讨论】:

  • 你为什么要这样做?
  • 像 omz 一样,很难看出这一点。您基本上想为某些键存储一堆 nil 吗?这是不允许的,并且如上所述几乎没有意义。也许你正在接近你试图解决的任何任务,但结果是错误的。你的最终目标是什么?
  • 我需要一个对象字典来实现相同的协议,但方法的实现会有所不同,键是告诉使用什么对象的参数。
  • 你少了一个括号。
  • 强调;您应该永远分配一个类的实例而不立即对其进行初始化,并且您应该始终假设来自初始化程序的返回值可能与来自分配器的返回值不同。

标签: objective-c nsdictionary nsobject alloc


【解决方案1】:

您需要在字典中存储可变对象。这样做您将能够在插入后修改它们,因为不可变字典不允许插入新对象。

如果对于“未初始化”,您的意思是只使用 alloc 创建了对象,而没有使用 init,这是不赞成的,因为 init 可能返回与使用 alloc 返回的对象不同的对象。所以就像你正在做的那样存储它们,当你需要修改它们时调用访问器:

NSDictionary *dict = @{ @"myObject1" : [MyObject1 new] , @"myObject2" : [MyObject2 new] };
dict[@"myObject1"].someProperty= someValue;

如果您的 MyObject1 类是不可变的,那么您必须使用可变字典。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2013-07-04
    • 2013-06-27
    相关资源
    最近更新 更多