macos - solucion - Mac OS X: ¿qué causa la pelota de playa que gira?
pelota de playa mac solucion (3)
El servidor de ventana mostrará el cursor giratorio de espera cuando la aplicación principal, o la aplicación que tiene una ventana debajo del puntero del mouse, no haya respondido a los eventos del servidor de ventana dentro de un cierto intervalo de tiempo.
Para evitar el cursor giratorio de espera, una aplicación necesita dar servicio a los eventos de manera oportuna. No hay forma de evitar este comportamiento de servidor de ventana, y por una buena razón: las aplicaciones en Mac OS X no se supone que nunca deben dejar de responder al usuario.
¿Cuándo decide OS X darle a su aplicación una pelota de playa giratoria? ¿Qué puedes hacer al programar una aplicación para evitar esto?
La razón es que tu aplicación está bloqueando la interfaz de usuario. Como dijeron los otros carteles, el administrador de ventanas puede notar que no ha manejado los eventos por un tiempo y ha puesto esta UI.
Lo más probable es que esté haciendo algo de IO (como leer o escribir en el disco o realizar solicitudes de red) de forma síncrona en el subproceso de UI (predeterminado). Una buena regla de oro para mantener su aplicación receptiva (y así evitar el beachball) es nunca hacer IO síncrono en el hilo de UI. Puede usar IO asíncrono (API que toman una devolución de llamada, funcionan en una cadena de fondo y luego lo notifican en el hilo de UI cuando finalizan), o bien puede usar una cadena de fondo separada para hacer el trabajo.
Si no está haciendo IO, entonces probablemente esté en algún tipo de bucle largo en el subproceso UI que está causando que no responda. En ese caso, optimice o elimine el bucle, o muévalo a un hilo de fondo.
Suponiendo que su aplicación tenga suficientes recursos de hardware (lo que no siempre será el caso en realidad), realmente no hay razón para que su aplicación llegue a ser una bola de playa. Si lo hace, averigüe qué sección de código está bloqueando la interfaz de usuario (si es no intuitiva, Shark.app será útil) y muévala a un hilo de fondo (o use otra estrategia para eliminar la pausa). Afortunadamente Cocoa y Objective-C tienen herramientas muy buenas para enhebrar, vea NSOperationQueue para comenzar. Apple también tiene algunos buenos documentos sobre la optimización del rendimiento. Consulte esta pregunta para ver los enlaces relevantes.