SIGSEGV literally means that you are accessing an address that you do not have. Therefore, it is not necessary that you access the released object; you can access an object that never existed, as in:
UIView *view;
Or even just make a mistake in non-object materials of level C, for example:
int array[100]; array[1000] = 23;
SIGBUS is very similar to SIGSEGV, the difference is on the hardware level (usually the difference between trying to access an address that exists but which you donβt have and trying to access an address that has nothing behind it, but this is not a strict definition), but usually associated with the same errors, although SIGBUS is much more likely to be associated with an uninitialized variable than SIGSEGV.
If you are trying to correlate the errors you probably made in Objective-C, you probably just want to read SIGSEGV and SIGBUS together, which means "access to memory, which I had no right to do."
SIGABRT is a program trying to interrupt itself, so this usually means that some internal consistency check failed. For example, SIGABRT occurs if you try to free the same memory twice, or - at the Cocoa level, if you raise a NSException that has not been caught. If you get SIGABRT, you did something wrong that is detected by the system software (as opposed to SEGV and BUS, which occur in the hardware).
SIGTRAP is a call from the program to the debugger. Anecdotally, Apple seems to use them when you are doing something wrong that might be detected in the software, but relates to the environment, not your specific code. So, for example, you call the C function, which exists in the SDK that you created, but not on the device you are working on (for example, when you create against the last SDK with a lower deployment target) or perform similar work with the object.
Tommy Sep 16 2018-11-11T00: 00Z
source share