这是我使用NSMutableArray的代码。
- (void) put:(NSString *)key value:(NSString *)value
{
Element *element = [[[Element alloc] initWith:key strValue:value] autorelease];
if (self.map) {
[map addObject:element];
}
else {
map = [NSMutableArray arrayWithObject:element];
}
}
-(void)dealloc
{
if (map) {
[map release];
}
[super dealloc];
}
我的苹果在line:[map release];
我的代码有什么问题?
我尝试按如下方式释放"map"。
- (void) put:(NSString *)key value:(NSString *)value
{
Element *element = [[[Element alloc] initWith:key strValue:value] autorelease];
if (self.map) {
[map addObject:element];
}
else {
map = [NSMutableArray arrayWithObject:element];
[map release]
}
}
那么苹果就不会崩溃。如何解决这个问题?
arrayWithObject:
方法返回一个自动释放对象;您需要保留数组:
map = [[NSMutableArray arrayWithObject:element] retain];
或使用initWithObject:
方法:
map = [[NSMutableArray alloc] initWithObject:element];
如果map是一个保留/复制属性,执行self.map=...
来保留它。[NSMutableArray arrayWithObject:element]
返回一个需要保留的自动释放对象
您正在使用方便初始化器arrayWithObject
,它具有隐式autorelease
。你不能release
自动释放的对象