SIGSEGV littéralement signifie que vous avez accès à une adresse qui ne vous appartient pas. Il n'est donc pas nécessairement que vous avez accès à un libéré de l'objet; vous pouvez accéder à un objet qui n'a jamais existé, comme dans:
UIView *view; // uninitialised, could point to anything
[view setFrame:someFrame];
Ou même de simplement faire une erreur en C-non-objet des éléments tels que:
int array[100];
array[1000] = 23; // out-of-bounds access
SIGBUS est très similaire à SIGSEGV, la différence étant au niveau du matériel (généralement la différence entre essayer d'accéder à une adresse qui n'existe pas mais qui ne vous appartient pas et d'essayer d'accéder à une adresse qui n'a rien derrière elle, mais ce n'est pas une définition stricte), mais est généralement associée avec le même genre d'erreurs, si un SIGBUS est beaucoup plus susceptibles de le faire avec une variable non initialisée qu'une SIGSEGV.
Si vous essayez de carte pour les erreurs que vous avez probablement fait en Objective-C, vous avez probablement juste de vouloir lire SIGSEGV et SIGBUS ensemble en ce sens "un accès à la mémoire, je n'avais pas le droit de faire".
SIGABRT est un programme qui tente d'avorter elle-même, de sorte qu'il signifie généralement que c'est une sorte de contrôle de cohérence interne a échoué. Par exemple, SIGABRT est déclenchée si vous essayez de libérer de la mémoire même deux fois, ou - au niveau de Cacao - si vous raise
un NSException
qui n'est pas pris. Si vous obtenez un SIGABRT, vous avez fait quelque chose de mal qui est détecté par le logiciel système (contrairement à SEGV et de BUS, qui surviennent dans le matériel).
SIGTRAP est un appel à partir du programme d'un débogueur. Pour l'anecdote, Apple semblent utiliser ces lorsque vous faites quelque chose de mal qui peut être détectée dans le logiciel, mais a trait à l'environnement plutôt que de votre code. Ainsi, par exemple, vous appelez une fonction C qui existe dans le SDK que vous avez construit avec mais pas sur l'appareil vous sont en cours d'exécution (par exemple, lorsque vous créez contre le dernier SDK avec une baisse de la cible de déploiement), ou de faire quelque chose de similaire avec un objet.