首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Texture

Texture原名是AsyncDisplayKit,是Facebookpaper团队发布一个基于UIKit库,这个库能够将图片加载、布局计算以及UI渲染等操作均放在后台线程,进而可以极大地优化APP...渲染:对于大量文本、图片等渲染,UIKit组件只能在主线程进行,可能会造成GPU绘制资源紧张;而ASDK会在后台异步绘制图层,不会阻塞主线程运行。 实际上,ASDK最大特点就是异步。...将消耗时间渲染、图片解码、布局计算、以及其他UI操作等等全部移除主线程,这样主线程就可以对用户操作及时作出响应,进而达到流畅运行目的。 控件 ?...所有的ASDisplayNodesASLayoutSpecs都符合协议,意味着你可以LayoutNode其他LayoutSpecs构成LayoutSpecs。...在堆叠布局中,以垂直水平堆叠对齐item,堆叠布局可以是另一堆叠布局子布局,这使得可以使用ASStackLayoutSpec来创建任何布局。

2.3K61

用这些 iOS 技巧让你 APP 性能更佳

有时,由于内存不足,操作系统可能需要在应用程序处于后台内存中删除应用程序,如果不保留状态,应用程序可能会丢失其最后一个UI状态跟踪,可能会导致用户丢失正在进行操作!...(查看大图) 01 在后台线程中处理繁重功能(GCD) 因为 UIKit 仅适用于主线程,所以在主线程执行繁重处理工作会降低 UI 速度。...应当尽量避免在主线程执行复杂计算,网络繁重IO操作(例如,磁盘读取写入)。 你可能曾经使用过突然操作停止响应应用程序,就好像应用程序已挂起。...很可能是因为应用程序在主线程上运行繁重计算任务。 主线程中通常在 UIKit 任务(如处理用户输入)一些间隔很小轻量级任务之间交替。...在后台线程上修改 UIKit 对象(例如 UILabel UIImageView)可能会产生意想不到后果,例如UI实际上没有更新,发生崩溃等等。

3.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Java基础(1)-Java特性及优势

总之,Java语言是一个纯面向对象程序设计语言。程序员来说,意味着要注意其中数据操纵数据方法method,而不是严格地用过程来思考。...在一个面向对象系统中,类class是数据操作数据方法集合。数据方法一起描述对象object状态行为。每一象是其状态行为封装。类是按一定体系层次安排,使得子类可以超类继承行为。...例如,Java显式说明每个基本数据类型大小和它运算行为(这些数据类型由Java语法描述)。 Java环境本身硬件平台操作系统是可移植。...9.多线程 在 Java 语言中,线程是一种特殊对象,它必须由 Thread 类其子(孙)类来创建。...通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 构造子类将一个实现了 Runnable 接口对象包装成一个线程,其二, Thread 类派生出子类并重写 run 方法

43330

UIview

Overview 在运行时,一个视图对象处理任何内容呈现它面积,还处理任何与内容交互。UIView类本身提供了基本行为与背景颜色填充矩形区域。...更复杂内容可以被子类UIView提出实施必要图纸事件处理代码。UIKit框架还包含一组标准子类,范围从简单按钮到复杂表,可以按原样使用。...布局子视图管理 一个视图可以包含零个更多子视图。 每个视图定义了自己默认调整行为与它父视图。 一个视图可以定义子视图大小位置。...UIView类做大部分工作执行实际动画,但你还必须表明哪个属性改变你想要动画。...因此,你应该叫UIView方法代码中运行您应用程序线程。这可能不是严格必需是唯一一次在创建视图对象本身,而是所有其他操作应该发生在主线程

69110

Android中进程线程

尽管服务进程与用户所见内容没有直接关联,但是它们通常在执行一些用户关心操作(例如,在后台播放音乐网络下载数据)。...特别地,如果 UI 线程需要处理所有任务,则执行耗时很长操作(例如,网络访问数据库查询)将会阻塞整个 UI。一旦线程被阻塞,将无法分派任何事件,包括绘图事件。用户角度来看,应用显示为挂起。...如果执行操作不能很快完成,则应确保它们在单独线程(“后台“工作”线程)中运行。...这可能导致出现不明确、不可预见行为,但要跟踪此行为困难而又费时。 为解决此问题,Android 提供了几种途径来其他线程访问 UI 线程。...注意:使用工作线程可能会遇到另一个问题,即:运行时配置变更(例如,用户更改了屏幕方向)导致 Activity 意外重启,这可能会销毁工作线程

1.2K30

iOS 事件处理机制与图像渲染过程

两个线程同时操作view树形结构:在线程A中for循环遍历并操作当前View所有subView,然后此时线程B中将某个subView直接删除,这就导致了错乱还可能导致应用崩溃。...iOS4之后苹果将大部分绘图方法诸如 UIColor UIFont 这样类改写为了线程安全可用,但是仍然强烈建议讲UI操作保证在主线程执行。...当不在一个动画块实现中,UIView所有图层行为返回nil,但是在动画block范围之内,它就返回了一个非空值。...除了UIKitCoreAnimation相关操作必须在主线程中进行,其他都可以挪到后台线程异步执行。...Node 刚创建时,并不会在内部新建 UIView CALayer,直到第一次在主线程访问 view layer 属性时,它才会在内部生成对应对象。

5.5K100

iOS 优化界面流畅技巧

如果对象不涉及 UI 操作,则尽量放到后台线程去创建,但可惜是包含有 CALayer 控件,都只能在主线程创建和操作。...不论通过何种技术对视图进行布局,其最终都会落到 UIView.frame/bounds/center 等属性调整上。...这一步是发生在主线程,并且不可避免。如果想要绕开这个机制,常见做法是在后台线程先把图片绘制到 CGBitmapContext 中,然后 Bitmap 直接创建图片。...,某些任务会因为某些原因(此处是 CGFont 锁)被锁住导致线程休眠,或者被阻塞,concurrent queue 随后会创建新线程执行其他任务。...我把 App 内所有异步操作,包括图像解码、对象释放、异步绘制等,都按优先级不同放入了全局 serial queue 中执行,这样尽量避免了过多线程导致性能问题。

1.4K10

Java基础知识(一)

程序员来说,意味着要注意应中数据操纵数据方法(method),而不是严格地用过程来思考。在一个面向对象系统中,类(class)是数据操作数据方法集合。...数据方法一起描述对象(object)状态行为。每一象是其状态行为封装。类是按一定体系层次安排,使得子类可以超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为类。...Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题功能。Java要求显式方法声明,它不支持C风格隐式声明。这些严格要求保证编译程序能捕捉调用错误,这就导致更可靠程序。...Java环境本身硬件平台操作系统是可移植。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。...多线程性 Java是多线程语言,它提供支持多线程执行(也称为轻便过程),能处理不同任务,使具有线索程序设计很容易。

48130

iOS面试中被面试官问到问题答案(一)

如果对象不涉及 UI 操作,则尽量放到后台线程去创建,但可惜是包含有 CALayer 控件,都只能在主线程创建和操作。...靠人工操作方式来覆盖所有测试用例是非常困难 ,尤其是加入新功能以后,旧功能也要重新测试一遍,导致了测试需要花非常多时间来进行回归测试,这里产生了大量重复工作,而这些重复工作有些 是可以自动完成...依据模型操作接口不同,视图可能需要多次调用才能获得足够显示数据。未变化数据不必要频繁访问,也将损害操作性能。 目前,一般高级界面工具构造器不支持模式。...代码层结构上来说 的话,面向对象和面向过程主要区别就是数据是单独存数还是与操作存储在一起。面向对象提供了数据封装后,是的某一操作而言,数据访问变得可靠了。...意味着任何这个单例交互产生副作用都会影响程序其他地方任意代码。

1.7K80

助你Carry全场独家面试题

添加运算符重载比没有它肯定会使设计更复杂,并且它可能导致更复杂编译器, 减慢 JVM,因为它需要做额外工作来识别运算符实际含义,并减少优化机会, 以保证 Java 中运算符行为。...这是在 Java 中不支持运算符重载另一个好处。省略运算符重载使语言更容易处理,反过来又更容易开发处理语言工具,例如 IDE 重构工具。Java 中重构工具远胜于 C++。...如果下一级try语句没有某种异常进行处理,异常栈就会执行出栈操作,直到遇到有处理这种异常try语句或者最终将异常抛给JVM。 4....什么是原子操作? 原子操作(atomic operation)意为”不可被中断一个一系列操作” 。 处理器使用基于缓存加锁总线加锁方式来实现多处理器之间原子操作。...int++并不是一个原子操作,所以当一个线程读取它值并加1时,另外一个线程可能会读到之前值,这就会引发错误。

29710

JAVA语言特征及核心

1.2、面向对象 Java是一个面向对象语言,程序员来说,意味着要注意应用数据操作数据方法(method),而不是严格地用过程来思考。...在一个面向对象系统中,类(class)是数据操作数据方法集合。数据方法一起描述对象(object)状态行为。每一象是其状态行为封装。...类是按一定体系层次安排,使得子类可以超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为类。Java程序是用来组织。...Java运行系统使用字节码验证过程保证装载到网络上代码不违背任何Java语言限制。这个安全机制部分包括类如何网上装载。...1.8、支持多线程 Java语言是支持多线程,所谓线程可以简单地理解为程序中有多个任务可以并发执行,这样可以在很大程度上提高程序执行效率。

49920

iOS 常用设计模式汇总

例如,模型对象可能是表示游戏中角色地址簿中联系人。用户在视图层中所进行创建修改数据操作,通过控制器对象传达出去,最终会创建更新模型对象。...UIView及其子类主要负责UI实现,而UIView所产生事件都可以采用委托方式,交给UIViewController实现。...1.1.3控制器对象 在应用程序一个多个视图对象一个多个模型对象之间,控制器对象充当媒介。控制器对象因此是同步管道程序,通过它,视图对象了解模型对象更改,反之亦然。...5.5注意事项 1、剥离类中易于变化行为,通过组合方式嵌入抽象基类 2、变化行为抽象基类为,所有可变变化父类 3、用户类最终实例,通过注入行为实例方式,设定易变行为 防止了继承行为方式,导致无关行为污染子类...完成了策略封装可替换性。 六、简单工厂模式 简单工厂模式中定义一个抽象类,抽象类中声明公共特征及属性,抽象子类继承自抽象类,去实现具体操作

1.7K10

View编程指南(三)

:viewRect]; 设置View属性 UIView类有几个声明属性来控制View外观行为。...您可以使用这些通知来更新与您view层次结构相关任何状态信息执行其他任务。 创建view层次结构后,可以使用superivewsubview属性以编程方式导航它。...隐藏view不会系统接收触摸事件。但是,隐藏view会参与与view层次关联自动调整其他布局操作。...您可以在自定义view中实现layoutSubviews方法,当自动执行行为本身不会产生所需结果时。此方法实现可以执行以下任何操作: 调整任何直接subview大小位置。...您可能会暂时将此属性设置为NO,以防止用户在长时间操作未决时操纵view内容。

1.7K30

CAAnimation 核心动画概念一、 CAAnimation二、 CAPropertyAnimation三、CABasicAnimation(基本动画)CAPropertyAnimation子类

概念 Core Animation可以用在 Mac OS X iOS平台. Core Animation动画执行过程是在后台操作.不会阻塞主线程....: 方法) 注意: 如果当动画正在执行时候, 将程序退出到后台, 那么当程序再次进入前台时候就不执行了。...如果想让图层保持显示动画执行状态,那就设置为NO,不过还要设置fillMode属性为kCAFillModeForwards fillMode:决定当前对象在非active时间段行为.比如动画开始之前...子类,也是个抽象类,要想创建动画对象,应该使用它两个子类:CABasicAnimationCAKeyframeAnimation 属性:@property(nullable, copy) NSString...如果fillMode = kCAFillModeForwardsremovedOnComletion = NO;那么在动画执行完毕后,图层会保持显示动画执行状态,但实质上,图层属性值还是动画执行初始值

1.8K90

setNeedsLayoutlayoutIfNeeded看我就懂!

,在应用程序线程调用此方法。...因为此方法不强制立即更新,而是等待下一个更新周期,您可以在更新任何视图之前使用它来使多个视图布局无效。此行为允许您将所有的布局更新合并到一个更新周期,通常更适合于性能。...您可能会想知道为什么在我们进行约束更改之前呢。苹果认为这是一个最佳做法,以确保任何以前更新等待更新周期完成,所以我已经添加了它。...当这样约束被更新时,它会自动执行相当于setNeedsLayout操作,因此在下一个更新周期内不需要更新视图。我们可以没有更多代码,你会看到更新,但它不会有动画效果。...** 因此,由于我们代码已经标记该视图需要通过setNeedsLayout进行布局更新,所以是在更新周期中立即启动视图更新,而不是更新周期开始约束更改帧移动动画。

2.6K90

AsyncDisplayKit 2.0 教程:入门「译」

至少,你UI可能是依赖于某种形式 scrollView。 这些类型用户界面完全依赖于主线程,并且线程阻塞非常敏感。主线程阻塞将导致丢帧,降低用户体验。...对象生命周期:创建,操纵销毁系统对象(即创建一个UIView) 当正确使用时,AsyncDisplayKit 允许您在默认情况下异步执行所有测量、布局渲染。...UIViews 创建并且拥有一个底层 CALayer,并为他们添加触摸处理其他交互功能。UIView 并不是 CALayer 子类,而是相互环绕,扩展其功能。...意味着,你必须通过某些手段做无缝处理,以便用户刷完当前数据列表时服务端加载新数据。...Scott Goodson(AsyncDisplayKit原创作者)也有几个你可能会感兴趣的话题。最近的话题很好概述了一些框架处理大图片存在问题尝试。 你可能会对 Paper构建 感兴趣。

2.1K20

如何用 Android vitals 解决应用程序质量问题

应用程序开发角度来看,当应用程序因为执行耗时操作(如磁盘网络读写)阻塞主线程时,就会发生 ANR。主线程(有时称为 UI 线程)负责响应用户事件并刷新屏幕上每秒绘制六十次内容。...因此,将任何可能延迟其工作操作都转移到后台线程是至关重要。 Android vitals 如何显示 ANR?...如前所述,当应用程序进程阻塞主线程时就会发生 ANR。几乎任何原因都可能导致这种阻塞,但最常见原因包括: 在主线程执行磁盘网络读写操作。这是迄今为止 ANR 最常见原因。...可以考虑调整包含数百万像素大图像大小,解析大块 HTML 文本,然后在 TextView 中显示。一般来说,最好让你应用在后台执行这些操作线程向另一个进程运行同步绑定调用。...另外,数据传递给另一个进程需要进行序列化反序列化,这也需要时间。最好后台线程进行进程间调用。 使用同步。即使你将繁重操作移动到后台线程,也需要与主线程进行通信以显示进度计算结果。

2.2K10

View编程指南

View管理应用程序可见内容 view是UIView类(子类之一)一个实例对象,并在应用程序window中管理矩形区域。view负责绘制内容,处理多点触控事件以及管理任何子view布局。...但是,在需要更多地控制view渲染动画行为情况下,您可以通过其layer执行操作。 要理解View图层之间关系,有助于看一个例子。...更改父view大小会产生连锁效应,导致任何子view大小位置也发生变化。当您更改父view大小时,可以通过适当地配置view来控制每个子view大小调整行为。...UIView许多属性都是可以动画,也就是说,存在从一个值到另一个值动画半自动支持。要为其中一个动画属性执行动画,您只需执行以下操作: 告诉UIKit你想要执行一个动画。 更改属性值。...通过在按钮内部嵌入自定义图像view标签来限制这些方法,如果按钮实现发生更改,则可能会导致应用程序现在将来某个时刻行为不正确。

2.2K20

Android vitals 帮您解决应用质量问题

开发者角度来看,ANR 则是指应用运行操作耗时过久,如磁盘网络 I/O,导致线程阻塞。主线程 (有时候也被称为 UI 线程) 主要负责响应用户事件以及每秒刷新 60 次屏幕。...因此很关键一点将任何可能延时主线程工作操作转到后台线程。 Android vitals 如何显示应用程序无法响应?...总的来说,还是让应用在后台运行此类操作比较合适; 向主线程另一进程同步调用 binder:与磁盘网络操作相似,在线程间进行阻塞调用时,程序执行会被转移到您无法控制地方。...因此,还是建议后台线程进行进程间调用; 使用同步:即使您将复杂操作转移到后台线程运行,依旧须要与主线程沟通以显示计算结果。多线程编程不容易,并且在使用同步锁时候,很难保证不出现阻塞执行。...幸好我们有 StrictMode,不用再自己瞎猜是什么原因导致 ARN 了。在调试构建时候,您可以使用这个工具捕捉主线程意外磁盘网络访问。

1.4K10

View编程指南(四)

在UIKit中,动画是使用UIView对象执行。 view支持一组涵盖许多常见任务基本动画。...在你想要执行更复杂动画时候,或者UIView不支持动画中,你可以使用Core Animationview底层layer来创建动画。...使用核心动画,您可以为您viewlayer设置以下类型更改: layer大小位置 执行转换时使用中心点 转换到三维空间中layer其sublayer layer分层结构中添加删除layer...在传递给此方法动画块中,通常动画唯一更改是与显示,隐藏,添加删除子view相关更改。将动画限制为该集合允许view创建view之前之后版本快照图像,并且在两个图像之间创建动画,更高效。...您可以基于view动画块内部外部应用动画。

62510
领券