Ios 使用自动释放释放,应用程序将崩溃
我编写了一个名为Album的应用程序(不使用arc),它是iPhone的原生“照片”。 我的问题: 1. (请查看附件文件名:1)点击“+”按钮,然后输入一些字符串并点击“保存”按钮时,应用程序将崩溃。但如果将代码从“NSMutableArray*AlbumArray=[[[NSMutableArray alloc]init]autorelease];”更改为“NSMutableArray*AlbumArray=[[NSMutableArray alloc]init]”,该应用程序可以正常工作。但我认为我应该使用自动释放释放 相关代码: //AlbumDB.mIos 使用自动释放释放,应用程序将崩溃,ios,crash,autorelease,Ios,Crash,Autorelease,我编写了一个名为Album的应用程序(不使用arc),它是iPhone的原生“照片”。 我的问题: 1. (请查看附件文件名:1)点击“+”按钮,然后输入一些字符串并点击“保存”按钮时,应用程序将崩溃。但如果将代码从“NSMutableArray*AlbumArray=[[[NSMutableArray alloc]init]autorelease];”更改为“NSMutableArray*AlbumArray=[[NSMutableArray alloc]init]”,该应用程序可以正常工作。
+ (NSMutableArray *)fetchAlbumData
{
#warning why autorelease crash?
NSMutableArray *albumArr = [[[NSMutableArray alloc] init] autorelease];
FMDatabase *db = [FMDatabase databaseWithPath:[self dataBasePath]];
if ([db open]) {
NSString *sqlSelect = @"SELECT * FROM ALBUM";
FMResultSet *result = [db executeQuery:sqlSelect];
while ([result next]) {
AlbumModel *albumModel = [[AlbumModel alloc] init];
albumModel.albumid = [result intForColumn:@"albumid"];
albumModel.albumName = [result stringForColumn:@"albumName"];
[albumArr addObject:albumModel];
[albumModel release];
}
[db close];
}
return albumArr;
}
@property (nonatomic, retain) AlbumModel *editingAlbum;
//MainViewController.m
- (void)dealloc
{
[_albumArr release], _albumArr = nil;
self.editingAlbum = nil;
self.detailViewController = nil;
[super dealloc];
}
我认为你应该更多地了解mrc。
在第一种情况下,albumArr如果是autorelease,则意味着当runloop结束时,它将被释放,因此当您使用时,\u albumArr将为零,当您将值设置为\u albumArr时,您必须保留它。
在第二种情况下,self.editingAlbum=[[AlbumModel alloc]init];它将导致编辑album retain cout==2。您必须将代码更改为这样:
AlbumModel*temp=[[AlbumModel alloc]init];
self.editingAlbum=温度;
[临时释放]代码>在第二种情况下,我是否可以使用其他方法来解决?例如:使用“self.editingAlbum=[[[AlbumModel alloc]init]autorelease]的阶段来解决?它也可以工作。但是自动释放通常由返回值使用,您无法处理dealloc情况。”因此,当您使用“否”时,\u albumArr将为零