非ARC应用程序中的NSMutableDictionary初始化

时间:2012-05-23 22:47:43

标签: iphone nsmutabledictionary

我不知道我今天是否完全在脑力训练,或者是什么。但基本上我正在尝试初始化要使用的NSMutableDictionary。我把它作为财产:

@property (nonatomic, retain) NSMutableDictionary *baseViewDictionary;
<。>文件中的

@synthesize baseViewDictionary;



// in the init method:
    NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithCapacity:0];
    self.baseViewDictionary = tempDict;
    [self.baseViewDictionary setObject:@"test" forKey:[NSNumber numberWithInteger:0]];
    [tempDict release];

我认为这是用于初始化NSMutableDictionary的模式。不幸的是,我的self.baseViewDictionary永远不会被设置。我的tempDict有一个我在调试器中看到的键/值对,但我的self.baseViewDictionary有0x0000000。所以它就像

self.baseViewDictionary = tempDict;

永远不会被运行。当我进入该行代码时,它跳转到@synthesize baseViewDictoinary,然后返回self.baseViewDictionary=tempDict行。

以下是setObject@"test"运行后调试器的图片。

enter image description here

1 个答案:

答案 0 :(得分:0)

你的模式是正确的。
初始化完成正确,没有内存泄漏,因为您在分配给属性后释放字典,该属性保留它。

您确定init方法是否正确? 我的意思是,拨打self = [ super init ](不是==),在此之后执行您的操作,然后返回self

看起来很明显,但由于您的实例变量似乎是nilself也可能是nil ......

- ( id )init
{
    if( ( self = [ super init ] ) )
    {
        NSMutableDictionary * tempDict = [ [ NSMutableDictionary alloc ] initWithCapacity: 0 ];
        self.baseViewDictionary        = tempDict;

        [ self.baseViewDictionary setObject: @"test" forKey: [ NSNumber numberWithInteger: 0 ] ];
        [ tempDict release ];

        NSLog( @"%@", self.baseViewDictionary );
    }

    return self;
}