深入探究Runloop源码分析

0 下载量 4 浏览量 更新于2024-12-15 收藏 34KB ZIP 举报
资源摘要信息:"Runloop:runloop源码.hm查看" 知识点: 1. Runloop基础 Runloop是一个用于处理事件的循环,在应用程序不执行任何任务的时候保持休眠状态,以节省CPU资源。在iOS开发中,Runloop被用于管理应用的各种事件处理,包括用户交互、定时器、网络事件等。Runloop为每个线程提供了一个Runloop对象,主线程的Runloop默认启动,而子线程则需要手动启动。 2. Runloop源码阅读 Runloop源码通常包含在苹果的开源框架Core Foundation中。Runloop的核心是CFRunloop,其源码以C语言编写。通过阅读源码,开发者可以更加深入地理解Runloop的工作机制和内部实现。HM文件(Header Map)是一种包含了头文件信息的文件格式,通常用于描述源码中头文件的依赖关系。 3. Runloop的组成部分 Runloop主要由以下几个部分组成: - Sources:事件源,负责获取事件。 - Observers:观察者,监听Runloop的各种状态变化。 - Timers:定时器,用于在指定时间后触发事件。 - Modes:运行模式,用于定义Runloop在特定模式下应该处理哪些事件源和定时器。 4. Runloop的运行模式 Runloop有以下几种运行模式: - Default Mode:默认模式,主要用于主线程和用户交互。 - Common Mode:公共模式,可以被加入到多个运行模式中。 - Event Tracking Mode:事件跟踪模式,主要用于处理触摸事件。 - Modeling Mode:模式化模式,用于处理模型事件。 - UIInitialization Mode:用户界面初始化模式,主要用于应用程序启动时的界面初始化。 - Networking Mode:网络模式,主要用于网络事件处理。 5. Runloop的API使用 在iOS开发中,Runloop的API主要通过NSRunloop类进行使用,包括: - running:判断当前线程的Runloop是否正在运行。 - run:启动当前线程的Runloop。 - stop:停止当前线程的Runloop。 - main:获取主线程的Runloop。 - current:获取当前线程的Runloop。 - add:向Runloop中添加事件源或定时器。 - remove:从Runloop中移除事件源或定时器。 6. Runloop与性能优化 Runloop的合理使用能够显著提升应用的性能。例如,通过合理配置定时器和事件源,可以减少CPU的无效工作。同时,通过Runloop的睡眠机制,可以降低功耗,延长设备的续航时间。 7. Runloop源码解读 阅读Runloop的源码,可以更深入地理解Runloop的工作原理和实现细节。例如,通过查看CFRunloop的源码,可以了解到Runloop是如何处理各种事件源和定时器的。此外,阅读源码还可以帮助开发者了解Runloop的性能优化策略,以及在不同的运行模式下,Runloop是如何进行事件处理的。 8. 系统开源 Runloop源码的公开,使得开发者有机会深入研究iOS的底层机制。这种开源方式不仅有助于开发者更好地理解和掌握iOS开发,也使得整个iOS开发社区能够共同进步,推动iOS技术的发展。

Exception in Application constructor Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:893) Caused by: java.lang.RuntimeException: Unable to construct Application instance: class Main at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:907) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182) at java.lang.Thread.run(Thread.java:750) Caused by: java.lang.NoSuchMethodException: Main.<init>() at java.lang.Class.getConstructor0(Class.java:3110) at java.lang.Class.getConstructor(Class.java:1853) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$7(LauncherImpl.java:818) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$3(WinApplication.java:177) ... 1 more出现这个报错怎么解决

2023-05-26 上传

Exception in Application constructor Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) Caused by: java.lang.RuntimeException: Unable to construct Application instance: class com.example.demo.Main at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:891) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class com.example.demo.Main (in module com.example.javafxtest) because module com.example.javafxtest does not export com.example.demo to module javafx.graphics at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392) at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:803) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184) ... 1 more

2023-05-24 上传