1

我不知道我今天是不是完全脑残了,还是什么。但基本上我正在尝试初始化一个要使用的 NSMutableDictionary 。我将其作为财产:

@property (nonatomic, retain) NSMutableDictionary *baseViewDictionary;

在 .m 文件中:

@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 有 1 个我在调试器中看到的键/值对,但我的 self.baseViewDictionary 有 0x0000000。所以就像

self.baseViewDictionary = tempDict;

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

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

在此处输入图像描述

4

1 回答 1

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;
}
于 2012-05-23T22:56:15.520 回答