我編寫了一個名爲Album的應用程序(使用no-arc)作爲iPhone的本機「照片」。 我的問題: 1. (請看附加文件名:1)點擊「+」按鈕,然後輸入一些字符串並點擊「保存」按鈕,應用程序將崩潰。但如果更改來自「NSMutableArray * albumArr = [[[[NSMutableArray alloc] init] autorelease];」到「NSMutableArray * albumArr = [[NSMutableArray alloc] init]」,該應用程序可以正常工作。但我認爲我應該使用autorelease來發布。使用autorelease發佈,應用程序將崩潰
相關的代碼: // 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];
}
在第二種情況下,我可以用另一種方式解決嗎?如:使用「self」的階段。 editingAlbum = [[[[AlbumModel alloc] init] autorelease]「來解決? – Liming 2014-11-21 08:21:49
它也可以工作。但autorelease通常使用的返回值不能處理dealloc情況。 – 2014-11-21 08:48:03
「因此,當您使用」no不會不會「時,_albumArr將爲零 – newacct 2014-11-21 21:05:59