背景描述:近期为现场编写了一个数据处理工具,因数据量较大,执行时间超过1小时,为了增强使用体验,采用多线程方式防止主界面卡死并且在主界面上实时打印当前执行信息。遇到问题:在子线程中,因需要实时返回当前执行信息到主线程界面展示,如果处理不当会出现【线程间操作无效: 从不是创建控件XXX的线程访问它】解决方法:看了网上的部分资料,发现可以通过几种方式来实现子线程更新主线程的控件信息,下面分别来看一下:            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-19 23:40:27
                            
                                86阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            iOS 上不建议在非主线程进行UI操作,在非主线程进行UI操作有很大几率会导致程序崩溃,或者出现预期之外的效果。我开始不知道这一点,在子线程中进行了弹窗操作,结果程序就出问题了!报的错误是(EXC_BAD_ACCESS(code=2,address=0xcc),0x1a0ad32: movl 204(%ecx), %edx ),我以为是空指针导致的内存泄露,用了很多方法,但这问题感觉很顽            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-12 20:24:49
                            
                                395阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            鄙人在多线程开发过程中遇到一个问题:代码中的子线程需要在循环中不断操作UI线程,但是在关闭UI窗口时,却提示“无法访问已释放的对象”。为了重现这个问题,本文使用多线程实现了一个简易的“小时钟”,时钟能够动态地显示当前的系统时间,时间更新间隔为1s。当然,我们完全可以使用Timer来实现这样一个“小时钟”,但是为了说明问题,我就勉强的使用多线程吧,就算有点“小题大做”之嫌,也请大家将就一下。程序的运            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-01 16:12:16
                            
                                157阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            原因有2个:1、在子线程中是不能进行UI 更新的,而可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为分线程可以更新UI。如果子线程一直在运行,则子线程中的UI更新的函数栈 主线程无法获知,即无法更新   2、只有极少数的UI能,因为开辟线程时会获取当前环境,如点击某个按钮,这个按钮响应的方法            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-20 13:25:53
                            
                                320阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            目录关于集中常见的崩溃场景发散思维UI更新一定要在UI线程里实现的原因崩溃问题分类信号可捕获崩溃信号不可捕获崩溃崩溃日志捕获信号可捕获崩溃利用Xcode第三方工具捕获原理信号不可捕获崩溃后台任务超时崩溃后台任务超时崩溃原因如何捕获后台崩溃呢?其他崩溃采集到崩溃信息后如何分析并解决崩溃问题总结关于集中常见的崩溃场景数组越界:在取数据索引时越界,App 会发生崩溃。还有一种情况,就是给数组添加了 ni            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-23 10:19:51
                            
                                85阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original运行时报 android.view.ViewRootImpl$CalledFromWrongThreadException:错误android.view.ViewRootImpl$CalledFromWrongThreadException: Onl            
                
         
            
            
            
            方法1:performSelectorOnMainThread[self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:NO];方法2:dispatch_async(dispatch_get_main_queue(), ^{ ... })1. dispatch_async(dispat            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-29 10:12:21
                            
                                70阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 为什么 iOS 不允许在子线程刷新 UI?
在 iOS 开发中,有一个非常重要的原则:用户界面的更新必须在主线程中进行。这是因为 UIKit(iOS 的用户界面框架)并不是线程安全的,如果在子线程中修改 UI,可能引发未定义的行为和令人困惑的错误。今天,我们将深入了解这个原则的原因,并展示如何正确地在主线程中更新 UI。
## 流程概述
在我们讨论具体的代码之前,让我们先看一下刷新 UI            
                
         
            
            
            
              iOS开发中,因为大部分函数都不是线程安全的,所以UI子线程中操作UI是非常危险的事,但是有时候因为开发者经验不足,不知道子线程中不能UI,或者知道但是写代码的时候没注意,或者不知道那些函数操作UI了(比如UITableView的reload函数),造成这个问题时常发生,防不胜防,而且iOS不像安卓,一旦子线程中操作UI就直接崩溃,iOS中操作UI只是有可能崩,导致问题经常不好重现,而且经常奔            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-30 09:15:10
                            
                                351阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            作为android开发人员,总是被要求着不能再子线程去更新UI,必须得再主线程更新UI,由于好奇,也由于看这些源码也可以提升自己,先来看看下面的代码class PracticeActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstan            
                
         
            
            
            
            1、组件化          
    image.png 
    2、为什么必须在主线程操作UIUIKit并不是一个 线程安全 的类,UI操作涉及到渲染访问各种View对象的属性,如果异步操作下会存在读写问题,而为其加锁则会耗费大量资源并拖慢运行速度。另一方面因为整个程序的起点UIApplication是在主线程进行初始化,所有的用户事件都是在主线程上进行传递(如点击、拖动),所以view只能            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-28 11:21:29
                            
                                128阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # iOS 子线程刷新 UI 指南
在 iOS 开发中,UI 刷新是一个常见的需求。然而,由于 UI 更新必须在主线程上执行,许多开发者在进行多线程操作时,可能会遇到 UI 刷新的问题。本文将详细介绍如何在子线程中刷新 UI,并提供代码示例和流程图。
## 为什么需要在子线程刷新 UI
在 iOS 中,主线程(Main Thread)负责处理 UI 相关的所有操作,包括界面绘制、事件响应等。            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-07-27 06:46:19
                            
                                89阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # iOS 子线程刷新UI的实现方法
在iOS开发中,由于大多数UI更新都是在主线程上完成的,因此使用子线程进行长时间的任务处理是很常见的。但是,子线程不能直接操作UI,这要求我们在子线程完成任务后,将结果返回到主线程来更新UI。下面将介绍整个过程以及实例代码。
## 整体流程
| 步骤 | 描述                                 | 代码示例            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-09-27 04:26:13
                            
                                23阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            iOS开发- reloadData无效 (子线程更新UI错误) 
 
0 
   个评论          
   今天在写一个聊天工具的时候遇到了一个问题。 注册的通知里面, 每当有其他用户发来消息的时候, UITableView 就要重新更新     
      
         cell.textLabel.t            
                
         
            
            
            
            考虑这个问题的原因:子线程不能更新UI子线程向主线程传值:发送消息new Thread() {
public void run() {
        Message message = new Message();
        message.obj = "你好主线程,我是子线程";
        mHandler .sendMessage(message);
        };            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-07 13:33:53
                            
                                78阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            大家都知道,在子线程中直接更新UI就会奔溃,报错如下:android.view.ViewRootImpl$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.报错提示:只有创建了视图层次结构的原始线程才能访问它的视图。什么意思呢?就是说,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-28 12:59:22
                            
                                53阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 为什么iOS要在主线程刷新UI?
在iOS开发中,我们经常会遇到“在主线程刷新UI”这一概念。那么,为什么UI必须在主线程上进行更新呢?在这篇文章中,我们将深入探讨这个问题,并通过代码示例帮助大家更好地理解。
## 1. 什么是主线程?
主线程是应用程序的核心线程。在iOS中,所有与用户界面的交互都必须在主线程上执行。这是因为UIKit(iOS的UI框架)并不是线程安全的,如果在非主线程            
                
         
            
            
            
                   •在项目中时常会运行很多极其复杂的算法之后再更新UI控件,可是我们发现这会耗费大量的时间,几乎让UI进程假死。有什么办法可以让程序在后台完成这些复杂的算法,当算法完成的时候再去更新UI控件以避免UI进程假死的情况呢?对了,多线程技术!后台创建一个线程来进行复杂计算,就可以不耽误UI线程更新UI控件。可是如果直接在线            
                
         
            
            
            
            1、在子线程中是不能进行UI 更新的,而可以立刻更新的原因是:子线程代码执行完毕了,又自动进入到了主线程,这中间的时间非常的短,让我们误以为子线程可以更新UI。如果子线程一直在运行,则无法更新UI,因为无法进入到主线程。2、程序一开始运行就进入了主线程。3、处理某些数据太过费时,影响用户交互,可以开辟子线程处理,处理完之后,然后通知主线程进行界面更新。4、iOS中只有主线程 才能立即刷新UI。主线            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-08 08:39:28
                            
                                407阅读
                            
                                                                             
                 
                
                             
         
            
            
            
                   在 iOS开发过程中,我一直知道更新UI需要在主线程中,但也没怎么细想为什么要在主线程中,或者说为什么不能在子线程中更新UI。今天抽空自己在网上查查资料 ,了解一下这个问题。      像UIKit这样大的框架上确保线程安全是一个重大的任务,会带来巨大的成本。UIKit不是线程安全的,假如在两个            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-14 16:14:34
                            
                                112阅读