iOS 防止UIButton 连续点击导致请求多次的问题!

2024-08-21 06:48

本文主要是介绍iOS 防止UIButton 连续点击导致请求多次的问题!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在项目中,很多逻辑请求都需要用到UIButton 做点击事件进行相关跳转或数据请求等!可以说是在项目中最常用的一种控件,但是有些细节上的处理还是我们要多注意的,比如我们今天说的连续点击UIButton导致数据请求多次的问题,或许这个问题网上已经有了很多相关资料,毕竟这个没什么难的!流传的无非就是那几个方法,第一种方法是通过使用runtime,设置UIButton0.5秒内不会被重复点击,第二种是在每次点击时先取消之前的操作,第三种是在点击后设为不可被点击的状态,通过UIButton的enabled属性来设置!

其实在我看来,我是比较中意第二种方法的,因为这样不会影响到界面交互的一个流畅性问题,但是在某些情况下还是需要第三种方法去实现!至于第一种方法,听起来可能是高端大气上档次,但是我表示“呵呵”,纯粹是误人子弟!如果我们在通过点击UIButton的点击事件做网络请求的时候,难道你就能够保证在runtime的时间之内能够收到网络请求的返回结果吗?如果是在网络不好的情况下,很有可能导致你这个请求是发送的N遍,然后最后获取到N中结果,如果你是通过addObjectsFromArray等方法添加数据的话,很有可能会导致添加数据重复的问题!

还有一种情况是比如我建立一个webSocket链接,然后需要通过点击UIButton,切换向服务器发送不同的数据请求,如果我用第一种方法的话就会导致不停地重复向服务器发送数据请求,然后收到N多条同样的数据,如果数据比较多的话直接会在你进行UI刷新的时候造成卡顿现象!虽然中间可能间隔了你设置的runtime时间,但是仍然避免不了!至于第三种方法虽然能够避免这个问题,但是会导致切换UI界面的不流畅的问题,因为你必须要等到收到服务器返回的结果后才能够点击不同的UIButton来切换界面!这种情况下我们就要使用第二种方法!

但是在有些情况下,如果我必须等收到服务器的返回结果才能够响应某种事件的话就必须要用到第三种方法,如果用第二种方法的话,你会在连续不停地点击UIButton事件的时候始终陷入一个循环,直到你手指离开屏幕才会响应,无疑会增加客户端cpu的服务压力!

至于什么时候使用runtime 的来解决UIButton 的连续点击造成的问题,我建议大家还是慎用!不要被千篇一律的重复博客、文章所误导!毕竟适合自己的才是最好的!

这篇关于iOS 防止UIButton 连续点击导致请求多次的问题!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092425

相关文章

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec