我不知道我今天是否完全在脑力训练,或者是什么。但基本上我正在尝试初始化要使用的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"
运行后调试器的图片。
答案 0 :(得分:0)
你的模式是正确的。
初始化完成正确,没有内存泄漏,因为您在分配给属性后释放字典,该属性保留它。
您确定init
方法是否正确?
我的意思是,拨打self = [ super init ]
(不是==
),在此之后执行您的操作,然后返回self
?
看起来很明显,但由于您的实例变量似乎是nil
,self
也可能是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;
}