Objective c 什么是NStagedate?

Objective c 什么是NStagedate?,objective-c,cocoa,quartz-composer,Objective C,Cocoa,Quartz Composer,我有一个我无法理解的错误,当我想释放NSMutableDictionary中的所有对象时发生了这个错误 这发生在一个名为body的自定义对象上,输出为: -[__NSTaggedDate body]: unrecognized selector sent to instance 0xffffffffffffffff 我在网上找到了关于它的很差的信息 那是苹果公司的一个私人班级。这样的错误通常发生在内存管理混乱时 为什么要释放字典中的所有对象?将对象添加到字典(或数组)时,字典将保留该对象(获取

我有一个我无法理解的错误,当我想释放NSMutableDictionary中的所有对象时发生了这个错误

这发生在一个名为body的自定义对象上,输出为:

-[__NSTaggedDate body]: unrecognized selector sent to instance 0xffffffffffffffff

我在网上找到了关于它的很差的信息

那是苹果公司的一个私人班级。这样的错误通常发生在内存管理混乱时

为什么要释放字典中的所有对象?将对象添加到字典(或数组)时,字典将保留该对象(获取所有权)。当您从字典中删除对象时,它将被释放,您不必这样做


你已经考虑使用了吗?它使内存管理变得容易得多。您不必再担心保留和释放对象。

不知道这个类,但它可能是一个私有类(我打赌它是使用“标记指针”技巧的NSDate对象的内部表示,但我只是猜测)

无论如何,崩溃不是发生在名为
body
的对象上,而是在调用名为
body
方法时发生的。崩溃可能是由于代码中的内存管理不好导致内存损坏

  • 在调试中运行应用程序时,应该激活僵尸,以帮助跟踪已发布的对象
  • 您通常不必自己保留和释放
    NSDictionary
    的对象,因为像
    NSArray
    NSDictionary
    这样的容器类保留它们所持有的对象,并在对象从中移除时释放它们。所以我不明白你为什么“想要释放NSMutableDictionary中的所有对象”:你只需要在
    NSDictionary
    上调用
    removeAllObjects
    ,你就完成了,不需要自己在对象上调用
    release
    (在字典中添加对象时,你也不需要调用
    retain

    • 这是一个内部未记录的可可类。但你并不关心它,因为它并不是真的发生了什么,它是一条红鲱鱼,可能是因为复杂的原因而发生的,在这里解释起来并不重要

      查看报告的地址:0xFFFFFFFFFFFFFF。这是一个毫无意义的价值。如果不是因为那条红鲱鱼,你应该有一个分割错误


      由于某种原因,您正在将消息
      正文
      发送到一个无效指针(可能是某个地方的某个损坏数据?)

      每当您尝试将一种数据类型设置为另一种数据类型时,例如“如果您直接将日期组件分配给文本到UIlabel”,在这种情况下,我都会发生

      [toDateLabel setText:[tempArr lastObject]];                                   // Cause
      
      [toDateLabel setText:[NSString stringWithFormat:@"%@",[tempArr lastObject]]]; // Solution
      

      谢谢大家。我使用这个NSMutableDictionary来存储对对象的引用。在Quartz Composer中,我在一个插件中创建对象,然后将它们传递给另一个存储引用的插件,以便第三个插件可以使用它们。我正在使用Box2D的Quartz Composer端口,我必须管理无法同时初始化的对象和Box2D对象。这本词典旨在保留这些参考文献。我释放这些对象是因为我在不同的插件中使用了大量的retain。仅供参考,我正在使用NSZombie。请就@AliSoftware答案的评论进行讨论。谢谢你的回答。说真的,什么是NSTAGGEDATE?与NSDate有什么实际区别吗?您可以从系统框架(如
      AlassetLibrary
      )中获取作为
      \uu nstaggeDate
      实例的对象。这些对象是有效的
      NSDate
      对象,如果使用
      [taggedDate isKindOfClass:[NSDate class]]]
      进行检查,则可以看到这些对象。如果(object.class==NSDate.class){}将无法与u\nstagedate一起使用。