在 UIView 中有一个 CALayer 的属性,负责 UIView 具体内容的显示。具体过程是系统会把 UIView 显示的内容(包括 UILabel 的文字,UIImageView 的图片等)绘制在一张画布上,完成后倒出图片赋值给 CALayer 的 contents 属性,完成显示。这其中的工作都是在主线程中完成的,这就导致了主线程频繁的处理 UI 绘制的工作,如果要绘制的元素过多,过于频
转载 2023-08-29 21:35:45
158阅读
前言 YYAsyncLayer是异步绘制与显示的工具。最初是从YYKitDemo中接触到这个工具,为了保证列表滚动流畅,将视图绘制、以及图片解码等任务放到后台线程,在YYAsyncLayer之前还是想从YYKitDemo中性能优化说起,虽然些跑题了… YYKitDemo 对于列表主要对两个代理方法的优化,一个与绘制显示有关,另一个与计算布局有关:- (UITableV
转载 2023-11-22 21:51:56
67阅读
IOS UIScrollView 2012-07-24 19:35 9195人阅读 评论(3) 收藏 举报 iosjavauiviewfloatiphone文档 UIScrollView 类负责所有基于 UIKit 的滚动操作。 一、创建 [java] view plaincopy CGRect bounds = [ [ UIScreen mainScreen ] applicationFra
作者 | Mkit 一、需求背景1、现状iOS所提供的UIKit框架,其工作基本是在主线程上进行,界面绘制、用户输入响应交互等等。当大量且频繁的绘制任务,以及各种业务逻辑同时放在主线程上完成时,便有可能造成界面卡顿,丢帧现象,即在16.7ms内未能完成1帧的绘制,帧率低于60fps黄金标准。目前常用的UITableView或UICollectionView,在大量复杂文本及图片内容填充后
转载 2023-07-24 23:36:20
128阅读
异步绘制UIKit的单线程天性意味着寄宿图通畅要在主线程上更新,这意味着绘制会打断用户交互,甚至让整个app看起来处于无响应状态。我们对此无能为力,但是如果能避免用户等待绘制完成就好多了。针对这个问题,有一些方法可以用到:一些情况下,我们可以推测性地提前在另外一个线程上绘制内容,然后将由此绘出的图片直接设置为图层的内容。这实现起来可能不是很方便,但是在特定情况下是可行的。Core Ani
错误的四个象限分类同步是需要主动等待消息通知,而异步则是被动接收消息通知,通过回调、通知、状态等方式来被动获取消息。IO多路复用在阻塞到select阶段时,用户进程是主动等待并调用select函数获取数据就绪状态消息,并且其进程状态为阻塞。所以,把IO多路复用归为同步阻塞模式。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行
转载 2023-07-17 23:49:03
73阅读
“一个菜鸟的自我修养,就是在低级职位上不抓狂,当一个优秀的菜鸟,就是为了有一天不当菜鸟。瞅准机会迅速脱离菜鸟轨道,然后一路飞翔到世界的尽头。“ 接下来系统的学习下并发编程,会有几篇吧,不多说,走起!    简介:     1.异步设计方式:传统并发编程模型是线程,ios采用“异步设计方式”来解决并发的问题;-也就是一个
转载 2023-08-16 18:43:34
44阅读
IOS 图片异步加载 - UIImageView(AFNetworking)说明 :AFNetworking是一个在进行iOS和Mac OS X 开发时使用广泛的第三方网络类库, 他建立在系统的URL加载系统框架之上, 扩展了Cocoa中更强大, 更高级网络提取功能.它有一个与精心设计的模块化的体系结构, 以及功能丰富的api介绍, 相信使用它会是一件快乐的事情.UIImageView(AFNet
转载 2024-02-19 17:22:33
38阅读
select、poll、epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select、poll、epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内
转载 2023-12-21 11:28:23
39阅读
参考地址:https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/很久以前就看过这篇文章,但是也只是看过就过了,没有去整理思路,最近有时间把一些点整理一下.通读下来可以总结一下对性能优化,在这里也就是提高界面流畅度的宗旨只有一句话唯而已:把能异步执行的都尽量异步执行.在我这篇里主要记录一下文本的异步绘制,先上两个视频,异
一、iOS 的图片加载如下所示,加载图片的代码:- (void)imageLoad { UIImage *image = [UIImage imageNamed:@"xxxxxxx"]; _imageView.image = image; }UlImage 是 iOS 中处理图像的高级类,创建一个 UlImage 实例只会加载 Data Buffer,将图像显示到屏幕上才会触发解码,也就是 D
有两种类型的文件IO同步:同步文件IO和异步文件IO。异步文件IO也就是重叠IO。 在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行。而异步文件IO方式中,线程发送一个IO请求到内核,然后继续处理其他的事情,内核完成IO请求后,将会通知线程IO操作完成了。 如果IO请求需要大量时间执行的话,异步文件IO方式可以显著提高效率,因为在线程等待的这段时间内,
转载 2023-09-23 13:20:22
43阅读
“一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作。 同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO。 阻塞IO和非阻塞IO的区别在于第一步,发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO。 同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查
转载 2023-07-16 23:11:12
91阅读
layer . cornerRadius’方法十分的耗性能 tableView的性能优化 不要动态的修改’cornerRadius’之类图层渲染相关的属性,因为CornerRadius 耗性能,而tableView是从缓冲池中获取的可重用的cell,然后设置模型,如果在tableView的cell中设置圆角图层属性,在界面上会不断的重绘,例如,给cell中的图片
写在前面在iOS开发中,无论是在UITableView还是在UICollectionView中,通过网络获取图片设置到cell上是较为常见的需求。尽管有很多现存的第三方库可以将下载和缓存功能都封装好了供开发者使用,但从学习的角度出发,看懂源码,理解其中的原理,结合自身的实际需求写出自己的代码是很必要的。在刚结束的Demo中,有用到异步图片下载功能,这篇笔记就是对整个实现的简单整理。基本思路cell
I/O 既 输出/输入 (Input/Output)既然是输入输出,为什么又会有同步和异步的不同方式呢?同步 当一个IO操作进行时,系统停下来等待这个IO的操作完成后才会继续进行下面的计算。异步 当一个IO操作进行时,通过多线程等方法,当CPU去处理那些不需要依赖IO执行结果的计算,充分的利用CPU的运算能力。当IO操作执行完毕时,继续执行后续的操作。一般情况下,作为单机程序或者IO反应速度非常快
转载 2023-09-25 21:34:06
57阅读
iOS开发中,CGD(Core Graphics Drawing)异步绘制图片的任务经常被用于提升应用的绘制性能,尤其是在复杂图形或大量图像处理时。通过利用主线程和子线程的并发处理,我们可以有效地避免阻塞主线程,从而提升用户体验。 ### 问题场景 在某个项目中,我们的应用需要动态地渲染多个高分辨率图像,同时保持界面的流畅性。开发过程中,发现由于图像的处理时间较长,造成主线程的卡顿,用户体验不
原创 6月前
46阅读
I/O介绍I/O(Input/Outpu) 即输入/输出 。学术的说 I/O 是信息处理系统(计算机)与外界(人或信息处理系统)间的通信。如计算机,即 CPU 访问任何寄存器和 Cache 等封装以外的数据资源都可当成 I/O ,包括且不限于内存,磁盘,显卡。软件开发中的 I/O 则常指磁盘、网络 IO。同步 & 异步同步、异步是消息通知机制。同步:同步就是发起一个调用后,被调用
iOS(iPhone/iPad) 下图形组件有两个有名的,s7graphview 和 Core Plot,它们都是在 Google 上托管的代码,听说 Core Plot 比较强,因为前者仅支持曲线图,后者呢曲线图、饼图、柱状图等通吃,且较活跃。那就专注下 Core Plot 的使用。它提供了 Mac OS X 和 iOS 下的组件库,
转载 2024-02-01 11:06:58
85阅读
相信很多同学都知道在iOS7之后调整导航栏两侧按钮距离左右间距,其实就是在左右barButtonItem的数组中添加一个宽度为负的占位item。- (void)addLeftBarButtonItem:(UIBarButtonItem *)leftBarButtonItem { UIBarButtonItem *space = [[UIBarButtonItem alloc] initWi
转载 2023-07-13 11:20:09
112阅读
  • 1
  • 2
  • 3
  • 4
  • 5