Objective c NSMutableArray移除对象是否增加引用计数?

Objective c NSMutableArray移除对象是否增加引用计数?,objective-c,nsmutablearray,retaincount,Objective C,Nsmutablearray,Retaincount,我有一些导致iOS静态库内存泄漏的代码。以下是来自仪器的对象寿命: # Category Event Type Timestamp RefCt Address Size Responsible Library Responsible Caller 0 Table_ColumnListener Malloc 4712087040 1 0x5e5fe60 16 Tests -[Table _initWithRows:andColumns:andTupleType:] 1 Table_Colum

我有一些导致iOS静态库内存泄漏的代码。以下是来自仪器的对象寿命:

# Category Event Type Timestamp RefCt Address Size Responsible    Library Responsible Caller
0 Table_ColumnListener Malloc 4712087040 1 0x5e5fe60 16 Tests -[Table _initWithRows:andColumns:andTupleType:]
1 Table_ColumnListener Retain 4712301056 2 0x5e5fe60 0 Tests -[AbstractColumn addColumnListener:]
2 Table_ColumnListener Retain 4712453120 3 0x5e5fe60 0 Tests -[AbstractColumn addColumnListener:]
3 Table_ColumnListener Retain 4712602112 4 0x5e5fe60 0 Tests -[AbstractColumn addColumnListener:]
4 Table_ColumnListener Retain 4712755968 5 0x5e5fe60 0 Tests -[AbstractColumn addColumnListener:]
5 Table_ColumnListener Retain 4712915968 6 0x5e5fe60 0 Tests -[AbstractColumn addColumnListener:]
6 Table_ColumnListener Retain 4713062144 7 0x5e5fe60 0 Tests -[AbstractColumn addColumnListener:]
7 Table_ColumnListener Retain 4729644288 8 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
      /\
 This is what confuses me
8 Table_ColumnListener Release 4729646080 7 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
9 Table_ColumnListener Release 4729647872 6 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
10 Table_ColumnListener Retain 4729679104 7 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
11 Table_ColumnListener Release 4729680896 6 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
12 Table_ColumnListener Release 4729682944 5 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
13 Table_ColumnListener Retain 4729713152 6 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
14 Table_ColumnListener Release 4729714944 5 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
15 Table_ColumnListener Release 4729717248 4 0x5e5fe60 0 Tests -[AbstractColumn removeColumnListener:]
16 Table_ColumnListener Release 4729731840 3 0x5e5fe60 0 Tests -[Table dealloc]
以下是
[AbstractColumnAddColumnListener:

-(void) addColumnListener:(id <ColumnListener>)listener
{
 [m_listeners addObject:listener];
}
-(void) removeColumnListener:(id <ColumnListener>)listener
{
 [m_listeners removeObject:listener];
}

当我从
NSMutableArray
中删除对象时,它似乎增加了保留计数,而不是减少它。有没有其他人遇到过这个问题并知道解决方法?

我可以重现你用仪器观察到的情况。在丢弃对象之前,NSMutableArray会保留它,执行一些魔法,然后释放它。此释放抵消了先前的保留,与稍后发生的事情无关:再次释放,这次是因为对象已从数组中移除

阵列的内部实现所做的一切与您无关。它可以根据需要随时保留/释放对象,重要的是它调用release的次数比retain多一次,因为当对象被移除时,您会期望这样。因此,你所观察到的

retain
release
release

很好,没有内存泄漏。在removeObject:的内部实现中执行代码时,retainCount可能会增加,但一旦该方法返回,计数实际上就会减少。

这确实很奇怪,但如果您注意到,只有三分之一或四分之一的调用
removeColumnListener:
实际执行
retain
对象,否则它会正常释放它。只是说,好问题。好的,是的,我看过了,正要在这里发布,是的,这就是发生的。。。谢谢你的帮助!