2009-04-21 58 views
0

我正在玩一點可可的應用程序,我寫了一個類的人的對象添加到NSMutableArray。當我嘗試訪問超出數組限制的對象時,我所得到的是控制檯上的「越界」消息。可可/ Objective-C數組超越界限問題

事實上,我預計會更糟。我預計該應用會崩潰!但事實並非如此。

我不確定這是好事還是壞事,但我不知道應用程序內部會發生什麼情況以防止其崩潰。我總是有想法訪問內存中不存在的對象。通常會殺死每個應用程序。

回答

5

在你的情況下,你實際上並沒有被允許直接訪問壞內存,因爲你通過NSArray對象進行連接。相反,發生的情況是你給對象一個錯誤的索引,並且它通過拋出一個異常來通知你。

默認情況下,在NSApplication應用程序的主線程上發生的異常不會導致應用程序終止。相反,他們記錄錯誤並中止當前運行循環,然後開始下一個循環。

有關如何在調試階段處理這些例外情況的更多信息,請參閱this document。它描述了在處理應用程序級異常時可以使用的各種技術和響應。

此外,讀寫不良內存並不總是導致應用程序崩潰,這就是爲什麼這些類型的錯誤可能很難追查。相反,你可能只是在破壞其他對象,並且不知道你在應用程序的週期中一直到後者。這裏要記住的重要一點是,NSApplication將壓縮主線程上發生的大多數異常,所以您必須對此予以額外的關注。