문제

From what I have understood, NSMutableDictionary releases all objects when released itself. I wrote a test for this:

#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);
    }
}

However, the object still exists, and has not been deallocated:

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

Why is this so?

도움이 되었습니까?

해결책

You've done an alloc & init on your "object". That makes the retain count 1.

When you add it to your dictionary, that makes the retain count 2.

When you release the dictionary, the retain count of the object is decremented to 1.

Which is why you can print out the "contents" of it, since "object" has a retain count of 1 and has not been truly released yet.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top