- 博客(47)
- 收藏
- 关注
原创 【iOS】UITableViewCell的重用问题解决方法
但是如果偏要走remove子视图的方法也不是不行,我们可以巧妙点,从复用池取出来要被复用的cell之后直接重新alloc初始化一下这个被复用的cell,相当于之前清空了原本保存的所有子视图的全部数据,而原本添加到cell上的子视图都还在,只是没有数据不显示罢了,这也是很好的手段。时都会为对应行组的cell重新添加那些子视图上的数据(相当于覆写了旧数据),我们只需要在所有的重新添加数据操作之前讲被复用的cell上子视图的数据全删了就行。这个方法,方法的意思就是“出列可重用的cell”,因而只要将它换为。
2024-08-15 11:15:37
1218
原创 【iOS】CALayer详解
当对非RootLayer的部分属性进行修改时,默认会自动产生一些动画效果而这些属性称为AnimatableProperties(可动画属性)。列举几个常见的bounds:用于设置CALayer的宽度和高度。修改这个属性会产生缩放动画。backgroundColor:用于设置CALayer的背景色。修改这个属性会产生背景色的渐变动画。position:用于设置CALayer的位置。修改这个属性会产生平移动画。可以通过动画事务(CATransaction)关闭。
2024-08-13 19:03:09
650
原创 【iOS】iOS触摸事件详解
提供了与硬件交互的底层接口,而作为管理设备用户界面的核心进程,依赖 IOKit 提供的硬件事件和数据来做出相应的用户界面更新。简而言之,IOKit 是 SpringBoard 能够处理硬件事件并更新用户界面的基础,二者协同工作以确保 iOS 设备的正常操作和用户体验。IOHIDEvent:底层的硬件输入事件,处理来自设备(如触摸屏、键盘等)的原始输入。UIEvent:系统级别的用户界面事件,是对IOHIDEvent的封装,代表各种用户输入(如触摸、手势等)。
2024-08-11 23:46:13
1455
原创 【iOS多线程(五)】多线程问题总结
答:自定义NSOperation可以通过重写main或者start方法。重写main方法,不需要管理操作的状态属性isExecuting和isFinished。重写start方法需要管理操作的状态属性。
2024-08-10 15:45:36
1096
原创 【iOS多线程(四)】线程安全+13种锁
互斥锁属于sleep-waiting类型的锁。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正在被线程B锁持有,那么线程A就会被阻塞(blocking),Core0会在此时进行上下文切换(Contex Switch)将线程A置于等待队列中,此时Core0就可以运行其他的任务(例如另一个线程C)而不必进行忙等待。使用案例:假设我们有一个数组,里面有两个线程,一个是添加数组,一个是删除数组,我们先调用删除数组,再调用添加数组,但是在数组为空的时候不调用删除数组。
2024-08-08 15:46:43
1497
原创 【iOS多线程(三)】优先级反转问题
概述优先级:线程C>线程B>线程A。优先级较低的线程B,通过压制优先级更低的线程A,比高优先级的线程C先执行了。解释:假如线程A拿到一个资源后加锁,线程C因为也需要这个资源于是挂起等待A执行结束。这一段符合逻辑没问题,但是此时线程B因为优先级比线程A高,直接抢占CPU,线程B执行完后,线程A执行,A解锁释放后,C再执行。这就导致原本优先级较低的线程B,通过压制线程A,比高优先级的线程C先执行了。下面这个时序图就是一个经典的优先级反转线程A在一个比较低的优先级上工作, 假设是10吧。
2024-08-08 09:31:18
1121
原创 【iOS多线程(二)】GCD其他方法详解
以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看 门人允许其中三辆直接进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开 车拦,放入外面的一辆进去,如果又离开两辆,则又可以放入两辆,如此往复。在这个停车场系统中,车位是公共资源,每辆车好比一个线程,看门人起的就是信号量的作用。我们使用GCD的时候如何让线程同步,也有多种方法。
2024-08-07 19:41:15
1022
原创 【iOS多线程(一)】GCD详细总结-同步异步/串行并发
1. GCD简介2. GCD任务和队列任务队列 (dispatch是派遣的意思)队列的创建方法和获取方法3.我的总结:同步和异步函数,并行和并发队列同步异步函数串行并发队列是否开启新线程,串行还是并发执行任务,如何分析?4. GCD基本使用同步串行队列同步并行队列异步串行队列异步并行队列sync函数造成的线程死锁5. 进程间通信6. GCD的其他方法6.1 GCD栅栏方法:dispatch_barrier_async6.2、GCD 延时执行方法:dispatch_after。
2024-08-07 12:03:27
1517
原创 【iOS】Tagged Pointer
答:Tagged Pointer是一种优化技术,用于存储小对象(如NSNumber、NSDate和NSString)的值。与普通对象不同,Tagged Pointer直接将数据存储在指针本身,而不是存储在堆上的内存块。例如,在64位系统上,如果指针的最高位为1,则该指针可能是Tagged Pointer。与之前介绍的 Tagged Pointer 相比,这种 Packed Tagged Pointer 的优势是能够存储更多的数据信息,提高了存储密度。如果检测一个指针是否是Tagged Pointer?
2024-08-06 19:27:23
1011
2
原创 【OC】NSDictionary和NSMutableDictionary
OC : NSDictionary和NSMutableDictionary
2023-10-30 22:15:31
374
1
原创 【C++】内联函数
C++中的内联函数是一种特殊的函数,它可以提高程序的执行效率,尤其是在频繁调用的情况下。本篇博客将介绍内联函数的 概念、用法和优缺点,使用实例,注意事项,使用范围,和宏定义的区别,实现方式,以及内敛函数的调试 。
2023-04-18 14:18:50
933
原创 【C++】传值返回和传引用返回的区别
传值返回和传引用返回都有其优缺点,应根据实际情况选择使用。一般来说,如果返回的结果是较小的基本类型或结构体,可以使用传值返回,而如果返回的结果是较大的对象或结构体,则应使用传引用返回。此外,如果调用方需要修改结果变量的值,则应使用传引用返回。需要注意的是,如果函数返回的是一个临时变量或一个静态变量,那么传引用返回是不安全的,因为这些变量可能在函数返回后被销毁,从而导致对已经不存在的内存进行访问。因此,在这种情况下,应使用传值返回。
2023-04-17 15:54:38
609
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人