2009-04-21 7 views
0

Je joue avec un peu de Cocoa Apps que j'ai écrit où j'ajoute des objets d'une classe Person à un NSMutableArray. Lorsque j'essaie d'accéder à un objet qui dépasse la limite du tableau, tout ce que je reçois est un message "beyond bounds" sur la console.Cocoa/Objective-C Array au-delà des limites question

En fait, je m'attendais à quelque chose de pire. Je m'attendais à ce que l'application plante! Mais ce n'est pas le cas.

Je ne sais pas si c'est une bonne ou une mauvaise chose, mais je me demande ce qui se passe dans les applications pour l'empêcher de se bloquer. J'ai toujours eu l'idée d'accéder à des objets en mémoire qui ne sont pas là. Normalement, cela tuerait toutes les applications.

Répondre

5

Dans votre cas, vous n'êtes pas autorisé à accéder directement à une mémoire incorrecte car vous interagissez via l'objet NSArray. Au lieu de cela, ce qui se passe est que vous donnez un mauvais index à l'objet, et il vous informe en lançant une exception. Par défaut, les exceptions qui se produisent sur le thread principal d'une application NSApplication n'entraînent pas la fin de l'application. Par défaut, les exceptions qui se produisent sur le thread principal d'une application NSApplication. Au lieu de cela, ils enregistrent l'erreur et abandonnent le cycle de boucle d'exécution en cours, puis démarrent le cycle suivant.

Pour plus d'informations sur la façon dont vous pouvez gérer ces exceptions pendant votre phase de débogage, veuillez consulter le this document. Il décrit diverses techniques et réponses que vous pouvez utiliser lorsque vous traitez des exceptions au niveau de l'application. De plus, la lecture et l'écriture d'une mauvaise mémoire ne provoquent pas toujours le crash de l'application, c'est pourquoi ces types d'erreurs peuvent être si difficiles à traquer. Au lieu de cela, vous pourriez simplement corrompre d'autres objets et n'avoir aucune idée que vous l'avez fait jusqu'à la fin du cycle de l'application. La chose importante à retenir ici est que NSApplication écrasera la plupart des exceptions se produisant sur le thread principal, donc vous devez faire très attention à cela.