【发布时间】:2012-03-15 04:57:28
【问题描述】:
我在尝试将对象添加到数组时遇到崩溃问题,我认为我创建对象并释放它的方式存在问题。但我不太确定,因为我的内存管理还是有点弱
NSMutableDictionary *schools = [[NSMutableDictionary alloc] init];
[schools setObject:name forKey:kFavoriteSchoolName];
//load data is getting data from NSUserDefault which I save
NSMutableArray *loadedArray = [self loadData];
//if loadedarray has object in there, then continue adding schools to it or make new array
if([loadedArray count] > 0)
{
[loadedArray addObject:schools];
> // it crashes here
[schools release];
return loadedArray;
} else
{
//It will add the school to the array for the first time if there is nothing when it loaded.
NSMutableArray *tempArray = [[[NSMutableArray alloc] init] autorelease];
[tempArray addObject:schools];
[schools release];
return tempArray;
}
此功能有助于将学校添加到收藏列表中。一次添加不了,再添加就崩溃了。
这是我的 loadData 函数代码
- (NSMutableArray *) loadData
{
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSMutableArray *list = [userDefault objectForKey:kSchoolList];
return list;
}
日志只说:线程 1:程序收到信号“SGABRT”
当我第一次运行程序并添加时,很好,我再次添加学校,然后只是它崩溃,在 [loadedArray addobject:schools] 崩溃;
【问题讨论】:
-
你能发布崩溃日志吗?
-
NSMutableArray *loadedArray = [self loadData];确保
[self loadData]返回的数组也是可变的...否则,请执行此操作并重试NSMutableArray *loadedArray = [[self loadData]mutable copy]; -
试试这个 NSMutableArray *loadedArray = [[NSMutableArray alloc] initWithArray:[self loadData]];
-
您好,感谢您的回答,mutableCopy 是正确的。现在可以正常使用了。
标签: iphone objective-c memory-management nsarray