繁体   English   中英

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

[英]NSMutableDictionary initialization in non-ARC app

我不知道我今天是否完全在脑筋急转弯,还是什么。 但是基本上我正在尝试初始化要使用的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"运行后调试器的图片。

在此处输入图片说明

您的模式是正确的。
初始化正确,在分配属性后释放字典时不会发生内存泄漏,保留该属性。

您确定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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM