NSMutableDictionary在删除对象时不调用'release'

时间:2014-02-15 04:10:43

标签: objective-c oop nsmutabledictionary ownership

根据我的理解,NSMutableDictionary在释放时释放所有对象。我为此写了一个测试:

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) 
{
    @autoreleasepool 
    {
        NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

        NSObject *object = [[NSObject alloc] init];
        [dictionary setObject:object forKey:@"key"];
        [dictionary release];

        NSLog(@"%@", object);
    }
}

但是,该对象仍然存在,并且尚未解除分配:

2014-02-15 09:34:31.883 Untitled[15548:707] <NSObject: 0x7fa0b9c09c60>

为什么会这样?

1 个答案:

答案 0 :(得分:3)

你做了一个分配&amp;在你的“object”上初始化。这使得保留计数为1。

将它添加到词典时,会使保留计数为2。

释放字典时,对象的保留计数减少为1。

这就是为什么你可以打印出它的“内容”,因为“object”的保留计数为1并且还没有真正发布。