【发布时间】:2012-11-15 16:22:26
【问题描述】:
在didFinishLaunchingWithOptions中,第一个代码是:
NSMutableArray *k = [[NSMutableArray alloc] initWithCapacity:10];
[k release];
(经过多次调试,我将其简化为这种情况)并且我得到了
*** -[__NSArrayM class]: message sent to deallocated instance 0x7576c90
*** -[__NSArrayM respondsToSelector:]: message sent to deallocated instance 0x7576c90
如果我在 alloc 行之后检查 'k' 上的 retainCount,它是 1。如果我用 NSArray 替换 NSMutableArray 一切都很好。这到底是怎么回事??
【问题讨论】:
-
在这之后你用
k做什么? -
@chrislhardin 什么?绝对不是这样的。
NSMutableArray(通常)在后台使用链表实现,NSArray使用实际数组。但是,不同的情况和构造函数可以改变它的支持方式。 -
发生的事情超出了这两行。我将它们复制到一个旧的(ARC 之前的)测试项目中,没有出现任何错误。
-
您对项目进行了清理吗? cmd-shift-k
-
@JorisWeimar:这很重要。在你释放它之后,你就不能再使用
k指向的NSMutableArray对象——对象被释放并且k变成了一个悬空指针。您可以再次使用 变量k,但在此之前,您必须指定k指向另一个对象或nil。
标签: ios nsmutablearray retain dealloc