- 博客(64)
- 资源 (2)
- 收藏
- 关注
原创 Flutter 语聊房项目 ----- 礼物特效播放
本文介绍了一种语聊房项目中礼物特效播放的抽象设计方案。通过定义通用的GiftEffect抽象基类,实现不同类型礼物特效的统一接口。系统采用工厂模式创建特效实例,并设计了特效管理器处理播放队列和优先级逻辑。资源管理方面实现了预加载和缓存机制,同时使用Isolate避免阻塞UI线程。该架构支持基础动画、全屏特效和3D特效等多种礼物类型,具有良好的扩展性,实现了特效播放与UI层的解耦,能够有效处理复杂礼物特效的播放需求。
2025-09-12 02:00:47
663
原创 Flutter 中的 Isolate
Dart中的Isolate是独立的并发执行单元,通过消息传递实现通信。Isolate拥有自己的内存空间和线程,不会共享内存,从根本上避免了数据竞争问题。主Isolate可以创建新Isolate来处理CPU密集型任务,保证UI线程不卡顿。
2025-09-11 23:56:52
993
原创 Dart 中的 Event Loop(事件循环)
Dart的事件循环机制是单线程异步编程的核心,通过微任务队列和事件队列实现任务调度。同步代码优先执行,随后清空微任务队列(如scheduleMicrotask和Future回调),最后处理事件队列(如I/O、Timer)。
2025-09-10 23:56:06
799
原创 Flutter多线程
特性Isolate核心事件循环,单线程多线程,真正的并行内存共享内存不共享内存,通过消息传递数据开销开销极小开销较大(每个 Isolate 约 >100KB 内存)通信简单,直接通过变量复杂,必须通过传递消息适用场景I/O 密集型任务(网络、文件、数据库)CPU 密集型任务(大量计算、图像处理)代码示例。
2025-09-10 22:46:16
1273
原创 iOS原生开发和Flutter开发的看法
应用设计严格遵循iOS的HIG(人机交互指南),大量使用原生组件(如SafariViewController、地图Callout),希望应用看起来“就是iOS应用”。需要频繁调用iOS最新的、尚未被Flutter插件封装的底层API或硬件特性(如ARKit、Core NFC、HealthKit等)。应用有大量品牌自定义的设计(如复杂的动画、非标准的控件),Flutter的自绘引擎能轻松实现且保证双端一致性。最优秀的工程师,懂得如何根据项目的目标、团队的状态和资源的限制,在这两者之间做出最明智的架构决策。
2025-09-09 23:58:32
1206
原创 Flutter 性能优化
:永远依靠性能分析工具来定位问题,而不是靠猜。const:尽可能多地使用constWidget。:长列表务必使用builder系列构造函数。build()方法里只做构建 Widget 这一件事。:选择适合你项目复杂度的状态管理方案,避免全局setState。:图片是内存杀手,务必处理好尺寸和缓存。:在真实的低端设备上进行性能测试,模拟器或高端设备往往无法暴露问题。:最终的性能评判和发布一定要在 Release 模式下进行。
2025-09-08 00:13:16
1836
原创 关键字 const
Flutter利用Dart语言的const特性优化性能。const创建编译时常量,具有唯一性和不可变性。在Flutter中,const能显著提升Widget重建效率:减少内存分配、避免GC压力、加快界面比对速度。通过将常用Widget标记为const,可复用实例而非重复创建,这对频繁重建的Flutter界面尤为重要。Flutter框架能识别相同const实例,直接跳过子树比对,大幅提升渲染性能。
2025-09-07 22:08:34
793
原创 重建 (Rebuild)、重布局 (Relayout)、重绘 (Repaint)
Flutter性能优化核心在于理解三个关键概念:重建、重布局和重绘。重建是执行build()方法生成新Widget树,开销最小;重布局是重新计算RenderObject的大小和位置,性能消耗最大;重绘仅更新视觉外观,开销中等。优化建议:合理使用setState,避免不必要的重布局,运用RepaintBoundary隔离重绘区域,使用const构造函数减少Widget实例创建。这三个操作层级递进,理解其区别有助于精准优化渲染性能。
2025-09-07 00:23:09
1079
原创 生命周期方法:didUpdateWidget
Flutter中的didUpdateWidget是State类的重要生命周期方法,用于在Widget更新时处理状态和资源管理。该方法在父组件重建时被调用,允许State对象保留并响应新Widget的配置变化。核心原理涉及Flutter三棵树(Widget、Element、RenderObject)的协调机制,通过Widget.canUpdate()判断是否重用State。典型应用场景包括:响应配置变化、管理订阅/监听器、优化性能避免重复计算、处理资源清理和动画过渡等。
2025-09-06 19:39:17
1262
原创 命令式 UI 和 声明式 UI
命令式UI与声明式UI是两种不同的界面开发范式。命令式UI(如UIKit)需要开发者编写详细指令逐步构建和更新界面,直接操作组件实例,适合精细控制但代码量大。声明式UI(如SwiftUI)则只需描述界面状态,由框架自动处理更新,代码更简洁高效。两者主要区别在于:命令式关注"如何做",需手动管理状态和更新;声明式关注"做什么",状态变化自动触发界面刷新。
2025-09-05 19:26:30
1405
原创 Flutter的三棵树
树角色特点职责Widget 树蓝图/配置轻量、不可变描述UI元素应该是什么样子Element 树粘合剂/管理者可变、长寿命管理Widget的更新,决定是复用还是重建UIRenderObject 树渲染工人重量级、持久负责实际的布局、绘制工作,计算尺寸和位置,渲染到屏幕简单记忆Widget 是配置,Element 是管家,RenderObject 是干活的。管家(Element)根据新的图纸(Widget)来决定是让工人(RenderObject)在原基础上修改,还是直接换一个新工人。
2025-09-05 18:59:07
1048
1
原创 编程范式:提升抽象能力的思维工具
编程范式是编写程序的基本方法论,主要分为命令式(关注"如何做")和声明式(关注"做什么")两大类。命令式包括过程式编程和面向对象编程,强调步骤和对象交互;声明式包含函数式和逻辑式编程,注重结果描述和逻辑推导。不同范式各具优势:过程式直观但复用性差,面向对象适合复杂系统但可能过度设计,函数式简洁但学习门槛高,逻辑式适合专家系统但应用领域窄。现代开发通常混合使用多种范式,根据具体需求选择最合适的编程方法。掌握多种范式能提升编程灵活性和问题解决能力。
2025-09-05 18:36:56
666
原创 认识 Flutter
Flutter是Google推出的跨平台UI开发框架,支持移动端、Web和桌面端应用开发。其优势包括:高性能渲染(直接调用GPU加速)、热重载开发体验、统一代码多端运行。相比传统WebView方案和React Native,Flutter通过自带渲染引擎(Android用Skia,iOS用Metal)实现更接近原生的性能,避免了桥接损耗和系统版本限制。特别是能保持不同平台、不同系统版本下一致的UI表现和性能,同时支持Material和Cupertino两种设计风格。
2025-09-05 17:37:00
879
原创 Widget 生命周期
Flutter的Widget生命周期分为StatelessWidget和StatefulWidget两类,StatefulWidget通过状态管理实现动态UI更新,而StatelessWidget则用于静态展示。
2025-09-04 16:34:09
1215
原创 InheritedWidget
摘要: InheritedWidget是Flutter中用于沿Widget树高效共享数据的特殊组件,解决了逐层传递数据的繁琐问题。它通过建立依赖关系,让子组件能直接访问上层数据。当InheritedWidget数据变化时,依赖它的组件会触发didChangeDependencies生命周期方法,实现状态更新。理解InheritedWidget机制是掌握Flutter状态管理的基础,现代库(如Provider)封装了其逻辑,但核心原理仍基于此。
2025-09-04 15:44:12
1056
原创 iOS直播短视频类APP上架4.3多次终上岸的惨痛经历
笔者接手公司从外包买来的代码,工程量很大(涵盖短视频,直播,动态),又是上架社交类,被拒4.3多次,2.3.1都经历过,最终上架成功!!!经历惨痛,在此记录下经验,避免后者踩坑!!!
2022-04-02 11:37:53
759
2
原创 iOS加载网页【全解】
WKWebView 全解基本使用 & 实际项目中遇到的问题目录:WKWebView 全解前言一、WKWebView的基本使用1.引入库2.读入数据二、实际项目中遇到的问1.WKWebView网页缓存刷新问题总结前言例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、WKWebView的基本使用示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。1.引入库代码如下(示例)
2022-03-25 14:41:34
9624
1
原创 如何设置Launch Image启动图片
首先,了解一下各设备和分辨率的大小尺寸 设备 分辨率 Retain 5.5 iPhone Plus 1242*2208 Retain 4.7 iPhone6 750*1334 Retain 4.0 iPhone5S、 iPhone5 640*1136 Retain 3.5 iPhone4s 640*960 3.5...
2016-02-16 15:52:38
651
转载 收集的一些学习ios的好网站(2)
原文:11 Insanely Great iOS Developers Sites本文为CocoaChina翻译,转载请注明。永不止步地向他人学习我相信,要想从一个"还不错"的人变成一个卓越的人,我们需要不停地向他人学习,同时还得尽早地适应最新的技术和工具。除了苹果官方文档网站之外,我列举了一些能获取有价值的文章和资源的网站,这些网站能够帮助我们更上一个
2016-01-29 13:58:22
445
转载 iOS不断旋转的UIBarButtonItem
做一个不断旋转的View简单,但是怎样让UIBarButtonItem旋转起来呢。一、先说一下需求:1.做一个RightBarButtonItem不断旋转的Demo;2.点击RightBarButtonItem 按钮旋转或暂停;三、关键代码展示(已加注释)://// ViewController.m// Navig
2016-01-29 13:49:47
1438
转载 iOS 整体框架类图
Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助。1、Cocoa是什么?Cocoa是OS X和 iOS操作系统的程序的运行环境。是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发中你可以使用各种语言;也不是开发工具,你可以在命令行上就可以创建Cocoa程序。Cocoa程序可以这么说,它是由一些对象组成,而这些对象的
2016-01-28 17:29:27
435
原创 iOS---Foundation(NSDecimalNumber.h)
一、简介在iOS中需要精确计算时,double, float类型往往会出现不可预料的问题:在调试过程中可以看到 doule 类型 d3在计算过程中值不是预计的9999.99。如果在要用中计算涉及到金额等重要数据,不建议使用这种不可控结果的方式,可以采用iOS提供的另外一种支持准确精度计算的数据类型 NSDecimalNumber.NSDeci
2016-01-28 16:45:39
1010
转载 iOS---Foundation(NSURLCache.h)简介
//http://www.cnblogs.com/wendingding/p/3950198.html一、关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的。 上面的情况会造成以下问题(1)用户流量的浪费(2)程序响应速度不够快解决上面的问
2016-01-26 17:14:52
430
原创 iOS沙盒机制
iOS沙盒机制: iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。 1、每个应用程序都有自己的存储空间 2、应用程序不能翻过自己的围墙去访问别的存储空间的内容 3、应用程序请求的数据都要通过权限检测,假如
2016-01-26 15:24:28
441
原创 iOS-CoreGraphics(CGAffineTransform.h)
一、简介 CGAffineTransform实际上是一个矩阵,称仿射变换矩阵。 transform是view的一个重要属性,它在矩阵层面上改变view的显示状态,能实现view的缩放、旋转、平移等功能。transform是CGAffineTransform类型的。使用transform后view的frame被真实改变的。
2016-01-25 10:38:35
612
原创 iOS画虚线
//画虚线 CAShapeLayer *shapeLayer = [CAShapeLayerlayer]; shapeLayer.frame=CGRectMake(15,300,290,0.5); [shapeLayer setFillColor:[[UIColorclearColor]CGColor]]; // 设置虚线颜色为b
2016-01-06 16:21:41
457
原创 iOS-QuartzCore(CAAnimation.h--解读)
CoreAnimation - CAAnimation.h#import <QuartzCore/CALayer.h>#import <Foundation/NSObject.h>@class NSArray,NSString,CAMediaTimingFunction,CAValueFunction;NS_ASSUME_NONNULL_B...
2015-12-23 08:41:51
1672
原创 iOS系统键盘样式
1.UIKeyboardTypeAlphabet2.UIKeyboardTypeDecimalPad3.UIKeyboardTypeEmailAddress4.UIKeyboardTypeNamePhonePad5.UIKeyboardTypeTwitter6.UIKeyboardTypeWebSearch7.UIKeyboardTy
2015-12-19 13:42:55
687
原创 UITextView 点return 隐藏键盘
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if ([text isEqualToString:@"\n"]) { [self.mainTextViewresignFirs
2015-12-18 10:33:05
337
原创 iOS-UIKit( UIBezierPath.h - -应用举例)
一、设置矩形视图的某个角或某几个角为圆角 UIView*view=[[UIViewalloc]initWithFrame:CGRectMake(100,100,80,30)]; view.backgroundColor=[UIColorblackColor]; [self.viewaddSubview:view]; UIBezierPath *
2015-12-18 09:35:48
394
原创 设置父视图的透明度与子视图的关系
一。设置父视图的透明度不影响子视图baseView.backgroundColor = [[color6_0getColor]colorWithAlphaComponent:0.5];其中baseView为父视图效果:(父视图颜色:[[UIColor redColor] colorWithAlphaComponent:0.5]; 子视图颜色:[UIColo
2015-12-18 09:19:52
639
原创 iOS-动画(iOS中的动画简介)
参考自http://www.cnblogs.com/wendingding/p/3801036.html, http://my.oschina.net/aofe/blog/270412, 在此表示感谢。iOS中的动画: 1.核心动画:Core Animation 2.UIView动画 3.UIImageV
2015-12-11 09:13:21
1333
原创 iOS-UIKit(UIScrollView.h - -解读)
UIScrollView.h#import #import #import #import #import NS_ASSUME_NONNULL_BEGINtypedef NS_ENUM(NSInteger, UIScrollViewIndicatorStyle) { UIScrol
2015-12-10 17:20:43
601
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅