Manejo de devoluciones de llamada

Tengo un método en una clase objetiva-C. Tiene 2 funciones de devolución de llamada escritas en C.El puntero de clase, es decirself se pasa a estas funciones comovoid *. En las funciones C, creo un puntero de clase de tipo y asigno elvoid * parámetro. La primera función de devolución de llamada se ejecuta con éxito. Pero elvoid * puntero se conviertenil en la segunda función de devolución de llamada. Tenga en cuenta que no he ajustado el puntero en la primera devolución de llamada, pero aún así obtengonil en 2da devolución de llamada.

¿Alguna idea de lo que podría estar yendo mal?

Por ejemplo:

kr = IOServiceAddMatchingNotification(gNotifyPort, kIOFirstMatchNotification,
                                      matchingDict, RawDeviceAdded, NULL,
                                      &gRawAddedIter);

RawDeviceAdded(NULL, gRawAddedIter, self);

Esto funciona bien Pero debajo de la función recibeself comonil.

kr = IOServiceAddMatchingNotification(gNotifyPort, kIOFirstMatchNotification,
                                      matchingDict, BulkTestDeviceAdded, NULL,
                                      &gBulkTestAddedIter);

BulkTestDeviceAdded(NULL, gBulkTestAddedIter, self);

Respuestas a la pregunta(3)

Su respuesta a la pregunta