Я пишу приложение (используя no-arc) под названием «Альбом», которое является родным для iPhone «Фото». Мой вопрос: 1. (пожалуйста, посмотрите имя прикрепленного файла: 1) при нажатии кнопки «+», затем введите строку и нажмите кнопку «сохранить», приложение выйдет из строя. Но если изменить код с «NSMutableArray * albumArr = [[[NSMutableArray alloc] init] autorelease];» на «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;
}
(посмотрите имя прикрепленного файла: 2) при анализе кода я обнаружил потенциальную утечку объекта. Но в dealloc я освободил. Почему произошло?
Соответствующий код: //MainViewController.h
@property (nonatomic, retain) AlbumModel *editingAlbum;
// MainViewController.m
- (void)dealloc
{
[_albumArr release], _albumArr = nil;
self.editingAlbum = nil;
self.detailViewController = nil;
[super dealloc];
}