我有一个我无法理解的错误,这是在我想释放 NSMutableDictionary 中的所有对象时发生的。
它发生在一个名为body的自定义对象上,输出为:
-[__NSTaggedDate body]: unrecognized selector sent to instance 0xffffffffffffffff
我在互联网上发现了关于它的非常糟糕的信息。
我有一个我无法理解的错误,这是在我想释放 NSMutableDictionary 中的所有对象时发生的。
它发生在一个名为body的自定义对象上,输出为:
-[__NSTaggedDate body]: unrecognized selector sent to instance 0xffffffffffffffff
我在互联网上发现了关于它的非常糟糕的信息。
那是Apple的私人课程。当您弄乱内存管理时,通常会发生此类错误。
你为什么要释放字典中的所有对象?当您将对象添加到字典(或数组)时,字典将保留它(获取所有权)。当您从字典中删除对象时,它将被释放,您不必这样做。
您是否已经考虑使用ARC?它使内存管理变得更加容易。您不必再担心保留和释放对象。
这是一个内部无证可可类。但是你并不关心它,因为它并不是真正发生的事情,它可能是出于复杂的解释和无关的原因而发生的红鲱鱼。
看报的地址:0xffffffffffffffff。这是一个没有意义的价值。如果不是因为那个红鲱鱼,你应该有一个分段错误。
您出于某种原因将消息发送body
到无效指针(可能是某处的某些损坏的数据?)。
不知道这个类,但它可能是一个私有类(我敢打赌,它是使用“标记指针”技巧的 NSDate 对象的内部表示,但我只是猜测)。
无论如何,您的崩溃不是发生在调用的对象上body
,而是在调用调用的方法时body
发生。崩溃可能是由于代码中的内存管理不善导致内存损坏
NSDictionary
自己的对象,因为容器类喜欢NSArray
并NSDictionary
保留它们所持有的对象,并在从它们中删除对象时释放它们。所以我不明白为什么你“想要释放 NSMutableDictionary 中的所有对象”:你只需要调用它就完成removeAllObjects
了NSDictionary
,不需要自己调用release
对象(你也不需要retain
调用在字典中添加对象时)每当您尝试将一种数据类型设置为另一种数据类型时,例如“如果您直接将日期组件分配给 UIlabel 的文本”,在这种情况下,我就会发生
[toDateLabel setText:[tempArr lastObject]]; // Cause
[toDateLabel setText:[NSString stringWithFormat:@"%@",[tempArr lastObject]]]; // Solution