我编写了一个名为Album的应用程序(使用无弧形),作为iPhone的本机" Photo"。 我的问题: 1. (请查看随附的文件名:1)单击" +"的按钮,然后输入一些字符串并单击"按钮"按钮,应用程序将崩溃。但是如果更改代码来自" NSMutableArray * albumArr = [[[NSMutableArray alloc] init] autorelease];" to" NSMutableArray * albumArr = [[NSMutableArray alloc] init]",该应用程序可以正常工作。但我想我应该使用自动释放来发布。
相关代码: // AlbumDB.m
+ (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;
}
相关代码: //MainViewController.h
@property (nonatomic, retain) AlbumModel *editingAlbum;
// MainViewController.m
- (void)dealloc
{
[_albumArr release], _albumArr = nil;
self.editingAlbum = nil;
self.detailViewController = nil;
[super dealloc];
}
答案 0 :(得分:0)
我认为您应该了解更多有关mrc的信息
在你的第一种情况下,如果是自动释放的albumArr,则意味着当runloop结束时,它将被释放,所以_albumArr在你使用时将为nil,你必须保留它,当你将值设置为_albumArr时。
在第二种情况下,self.editingAlbum = [[AlbumModel alloc] init];它会使editAlbum保留cout == 2.你必须将代码改为这样:
AlbumModel *temp = [[AlbumModel alloc] init];
self.editingAlbum = temp;
[temp release];