2014-11-21 54 views
0

我編寫了一個名爲Album的應用程序(使用no-arc)作爲iPhone的本機「照片」。 我的問題: 1. enter image description here (請看附加文件名: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; 
} 
  • enter image description here (請看附加的文件名: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]; 
    } 
    

    回答

    0

    我想你應該瞭解MRC。
    在第一種情況下,albumArr如果是autorelease,則意味着runloop結束時它將被釋放,因此當您使用_albumArr時它將爲零,您必須保留它,當將值設置爲_albumArr時。
    在第二種情況下,self.editingAlbum = [[AlbumModel alloc] init];它會降低編輯相冊保留cout == 2。您必須將代碼更改爲這樣:
    AlbumModel *temp = [[AlbumModel alloc] init]; self.editingAlbum = temp; [temp release];

    +0

    在第二種情況下,我可以用另一種方式解決嗎?如:使用「self」的階段。 editingAlbum = [[[[AlbumModel alloc] init] autorelease]「來解決? – Liming 2014-11-21 08:21:49

    +0

    它也可以工作。但autorelease通常使用的返回值不能處理dealloc情況。 – 2014-11-21 08:48:03

    +0

    「因此,當您使用」no不會不會「時,_albumArr將爲零 – newacct 2014-11-21 21:05:59

    相關問題