自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (3)
  • 收藏
  • 关注

原创 iOS的热更新:OC热更新、Swift热更新、SwiftUI样式的热更新、OC与Swift对比

通过JSExport协议暴露 Swift 方法给 JS:swift// 定义协议(需继承 JSExport)// 暴露给 JS 的方法:显示弹窗// 暴露数据给 JS:当前用户信息// 实现桥接类// 持有视图控制器用于操作UI// 实现弹窗方法alert.addAction(UIAlertAction(title: "确定", style: .default))// 用户信息return ["name": "张三", "age": 25]

2025-10-28 07:08:48 698

原创 Jenkins和Fastlane的原理、优缺点、用法、如何选择

Jenkins 和 Fastlane 是软件开发中用于自动化流程的工具Jenkins 本质上是一个基于 Java 的持续集成和持续交付(CI/CD)工具。它通过轮询代码仓库(如 Git、SVN 等),检测代码是否有更新。当发现有更新时,根据配置的构建任务,拉取最新代码到构建服务器,然后执行配置好的构建脚本,完成项目的编译、打包等操作。Jenkins 利用其插件生态系统,能够与各种版本控制系统、构建工具和通知系统集成,实现自动化的持续集成和交付流程。

2025-09-03 20:30:00 1057

原创 Provider中的watch、read、Consumer、ChangeNotifierProvider、ValueNotifierProvider

它主要用于在不希望 Widget 因状态变化而重建的情况下获取状态对象,例如执行一些与 UI 更新无关的操作,如业务逻辑处理、数据计算等。例如,在一个计数器应用中,当计数器的值发生变化时,UI 需要显示最新的计数值。例如,你可能只想在页面的某个特定区域根据状态更新 UI,而不是整个 Widget 因为状态变化而重建。是一个 Widget,它允许你更灵活地控制依赖状态的 Widget 在 Widget 树中的位置和结构。:当你希望在 Widget 树的特定位置,基于状态构建一个 Widget 时,

2025-09-03 20:00:00 710

原创 flutter 中 的 关键字

用于类成员(属性或方法),表示该成员属于类本身,而不是类的实例。用于类声明,表明该类是密封类。密封类不能被继承,并且其所有的子类必须在与密封类相同的库中声明。比如,当你进行网络请求、读取文件等耗时操作时,这些操作不会立即返回结果,而是返回一个。Mixin 是一种在多个类层次结构中复用代码的方式,它避免了多重继承的复杂性。变量可以是任何类型,类型检查发生在运行时,变量的类型可以在运行期间更改。修饰的成员是编译时常量,在编译时就必须确定其值,并且其值不能改变。函数内部使用,它的作用是暂停当前函数的执行,直到。

2025-08-28 13:07:04 334

原创 Android组件化开发方案和原理

组件化的本质是 “分治思想”,通过“拆分组件、隔离通信、动态组装”,合理的边界划分实现 “高内聚、低耦合”,需结合路由框架(如 ARouter)、合理的组件划分和 Gradle 配置,平衡 “独立性” 和 “协同性”。Android 组件化开发是一种将应用拆分为多个独立、可复用组件的架构模式,核心目标是解决大型应用开发中的。主流框架:ARouter(阿里),原理是 **“编译期注解生成路由表,运行时匹配路径”**。通过合理组合这些工具和方案,可高效实现组件化开发,平衡代码复用性、可维护性和开发效率。

2025-08-10 15:16:33 931

原创 Android的事件分发流程、Kotlin协程、4大组件、Handler机制、架构设计、性能优化、内存泄漏

事件分发遵循Kotlin 协程的优势是什么?suspendlaunchasyncJobIOMainDefault解释suspend关键字的作用。suspend关键字标记一个函数为挂起函数,允许协程在执行该函数时暂停,保存上下文状态,待结果返回后恢复执行。挂起函数只能在协程或其他挂起函数中调用。简述 Activity、Service、BroadcastReceiver 和 ContentProvider 的作用。Activity 的启动模式有哪些?简述 Handler 机制的原理。

2025-08-10 15:02:13 928

原创 堆和栈的区别

频繁的分配和释放可能导致内存中出现大量不连续的空闲块(碎片),当碎片过多时,即使总空闲内存足够,也可能无法分配大块连续内存。原因:堆的内存地址是分散的(可能存在碎片),分配时需要内存管理器查找空闲块,访问时需通过指针间接定位,额外开销更大。原因:栈的内存地址是连续的,且分配时无需复杂的内存查找,编译器可通过栈指针直接定位数据(类似数组访问)。由于栈的分配和释放是连续的(严格遵循 LIFO),内存块不会被分割,释放后直接归还给系统,不会产生碎片。:进程内所有线程共享堆内存。:每个线程有独立的栈。

2025-07-31 15:16:20 1095

原创 Flutter报错Flutter和Dart版本问题以及报错curl: (60) SSL certificate

以上无非是Flutter和Dart版本问题:根据项目情况从以下几种方式入手解决1)在pubspec.yaml理修改environment: sdk:版本范围 2)flutter upgrade 3)如果有安装多个版本的Flutter和SDK可在Setting->Languages & Frameworks 的Dart和Flutter分别选择合适的版本路径。

2025-07-30 06:00:00 579

原创 Flutter包体积优化方案及市面应用案例对比

【代码】Flutter包体积优化方案及市面应用案例对比。

2025-07-29 06:00:00 1041

原创 用了Flutter包体积增大就弃用Flutter吗?包体积与开发效率,这两者之间如何权衡?

原生开发需维护两套 UI 逻辑(Android 的 XML+iOS 的 Storyboard),易出现 “双端体验不一致”(如按钮样式、动画效果);是否因包体积增大而弃用 Flutter,本质上是 “短期成本(包体积)” 与 “长期价值(跨平台效率、体验一致性等)” 的权衡。这一决策没有绝对答案,需结合项目阶段、用户群体、业务需求等具体场景分析。:双端原生开发需持续同步功能(如新增一个支付页面,需 Android 和 iOS 各开发一次),而 Flutter 只需一次开发,长期迭代成本更低。

2025-07-28 23:38:53 833

原创 Flutter渲染引擎:Impeller和Skia

一、Impeller 渲染引擎的发布时间:2021 年 Google I/O 大会上首次提及,作为 Skia 的替代方案被提出,初期仅支持 iOS 平台。:2022 年随 Flutter 3.7 版本进入,可通过配置手动启用。:2023 年 Flutter 3.10 版本将其设为 iOS 平台的,彻底替代 Skia 在 iOS 上的地位;2024 年 Flutter 3.24 版本扩展至 Android 平台,实现跨平台统一渲染。

2025-07-28 17:00:33 2354

原创 RxSwift 核心解析

RxSwift 通过响应式编程范式解决了异步编程的复杂性问题,但引入了较高的学习成本和概念 “重量”,引入 RxSwift 会增加 App 包体积约 3-5MB(Release 模式),对体积敏感的项目有一定影响。其源码设计精巧,采用多种设计模式实现高度抽象和灵活组合,适合处理复杂数据流场景,但需谨慎使用以避免过度设计。

2025-07-22 19:39:34 1012

原创 iOS组件化详解

组件化是大型 iOS 项目解决耦合、提升协作效率的核心方案,通过分层设计和 CTMediator 等中间件实现模块解耦;其与工程化(流程规范)、插件化(动态加载)定位不同,需根据项目规模和业务需求选择。

2025-07-22 17:01:03 1257

原创 Provider 做 状态管理 和 路由管理 及 与其他方案对比

是 Flutter 官方推荐的状态管理解决方案,它基于实现,通过依赖注入的方式高效管理应用状态,避免深层嵌套传值问题。

2025-07-21 18:19:42 913

原创 Flutter 与 原生(Android/iOS)通信 Platform Channel

在Flutter中,Platform Channel是实现Flutter与原生平台(Android/iOS)通信的核心机制,其设计遵循轻量级异步通信原则,用于解决Flutter跨平台开发时与原生功能的交互需求。

2025-06-24 10:18:01 857

原创 GetX 实现 MVVM 架构, 高效 路由管理 和 状态管理

GetX是Flutter中的一个高效的状态管理与路由管理框架,结合MVVM架构能简化代码逻辑。通过GetX的GetxController和路由API,可轻松实现MVVM架构的状态管理与路由控制,同时保持代码的简洁性和可维护性。响应式机制:通过obs修饰符(int.obs、List<String>.obs等)使数据具备响应式,修改时自动刷新UI。return [User(1, '用户1'), User(2, '用户2')];• View:UI组件(Widget),通过GetX的响应式API绑定数据。

2025-06-22 18:29:35 1104

原创 跨平台Flutter 、ReactNative 开发原理

在build方法中,我们创建了一个MaterialApp,它是一个预制的应用程序widget,它提供了一个应用程序所需的标准结构,例如Scaffold(包括顶部的appBar和中心的body)。‌组件化开发‌:React Native 鼓励组件化开发,开发者可以将复杂的 UI 拆分为多个独立的组件,每个组件管理自己的状态,并通过组合这些组件来构建复杂的应用。当应用运行时,虚拟DOM会被转换为相应的平台编码,例如Android或iOS的本地控件,从而实现跨平台的效果‌2。JavaScript代码运行在。

2024-11-05 19:57:13 1262

原创 静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构

告诉CocoaPods不要生成静态库(‌.a文件)‌,‌而是生成框架(‌.framework)‌,‌Swift项目就能更容易地导入和使用这些库。‌这样做的好处之一是它允许你的Swift项目利用Swift的包管理特性,‌如更简单的依赖项导入和更好的模块兼容性。动态库被完全载入内存,是在代码里使用它的时候。运行调试闭源库 制作之后运行看效果和调试bug,总不可能每次都接入到要用SDK的工程吧,此时就需要专门的测试工程,可通过以下方式关联SDK和测试工程,Products文件夹下是编译后生成的SDK。

2024-11-05 13:53:43 2076

原创 Mac touchbar 触控条不显示、触控条不能点击交互,先别急着送修,试试这样操作~

在终端中输入命令:sudo pkill TouchBarServer,回车,会提示输入电脑密码,输入密码后回车。如果还是不行,关机重启的过程中按住Command-Option-P-R(二、MacBook touchbar 显示但不能触摸交互。一、MacBook touchbar 触控条不显示。找到名为 TouchBarServer 的进程,但是此时,触控条虽然显示,但是不能点击交互。此时观察触控条,它应该会恢复。此时观察触控条,它应该会恢复。)直到听到第二次电脑启动声为止。然后选择退出或强制退出。

2024-10-26 11:19:54 6604

原创 Android基础Adapter适配器详解

一定要以数据库作为数据源的时候,才能使用SimpleCursorAdapter,且特别需要注意:必须在AndroidManifest.xml文件中加入权限(注意项目里AndroidManifest.xml文件名可能不是这个,可能是attrs_manifest.xml但是)在显示列表上加按钮:写一个有按钮的xml,首先会想到定义一个适配器,然后将数据映射到布局文件上。c.数据 具体的将被映射的字符串,图片,或者基本组件。

2024-02-20 18:26:16 767

原创 1.29 SwiftUI学习笔记及报错问题记录

1.FormA container for grouping controls used for data entry, such as in settings or inspectors.对用于数据输入的控件(如设置或检查器)进行分组的容器用法:var body: some View { Form { Section(header: Text("Notifications")) { Picker("Notify Me

2022-01-29 18:12:09 2063

原创 2022.1.4 Android导入compose的 Maven 组遇到的问题

1)Unresolved reference: compose 提示Add ‘jcip.annocations.jar’ to path按提示add后会import net.jcip.annotations.Immutable 这时@Immutable不报错了 但是import androidx.compose.runtime.Immutable依然报错2)Google搜索import androidx.compose.runtime会指向官方提示库导入文档 https://developer.an

2022-01-04 18:27:56 4272

原创 12.16 Android常见标签 UI控件

1.android:supportsRtl="true”指支持从右向左布局support right-to-left (RTL) layouts 是API17即Android4.2以后才有,之前是不支持该属性。当设置-开发人员选项-强制使用从右到左的布局方向就能看到效果。2.xmlns是xml namespace的缩写,C++中的namespace和Java中的packagename,是为了解决(如类名、接口名等)命名冲突。因为xml中标签不是预定义,所以会遇到命名冲突问题,而HTML中是预定义

2021-12-17 18:12:46 2870

原创 12.15 写Android UI组件遇到问题

1.imeOptions :android键盘中的enter键图标是可以用EditText的android:imeOptions标签变更android:ems = "10" : 设置TextView或者Edittext编辑的字符串长度为10,超出部分不显示,该属性只有android:layout_width=“wrap_content”时才显示,是march_parent时不会有变化android:layout_alignParentBottom="true"2.遇到问题:1)androi.

2021-12-15 19:39:37 5617

原创 12.14 Layout Inspector、颜色设置、xml不同文件类型区别、drawable不同文件名含义区别、常见UI控件

1.Tools > Layout Inspector1.1. 左Component Tree:布局中视图的层次结构。1.2 中 Layout Display:按照应用布局在设备或模拟器上的显示效果呈现布局,并显示每个视图的布局边界。1.3. 中上 布局检查器工具栏:布局检查器的工具。1.4. 右 Attributes:所选视图的布局属性。 1.5.选择视图: 在Component Tree或Layout Display中点击则选中视图,所选视图的所有布局属性都会显示在...

2021-12-14 19:11:39 1974

原创 12.7Android的Debug

12.71.Run模式和Debug模式是区分开的; Run、Debug、Run……with coverage1)选择Debug模式下,代码左边断点 红色小圆点2)在左下角的Debugger 调试 step over / step into单步调试或F8 / force step into 所有方法看完整/ step out/ drop frame / run to cursor3)当前程序运行位置的值 单步执行到哪一步,右边黄色代码会显示出来4)logcat是EventLog吗?...

2021-12-14 09:31:39 722

原创 12.13 XML布局 和 LiveData

1.xml布局Java代码调用方法控制UI 缺点:繁琐不易解耦;xml布局便捷但有失灵活xml文件编译时,都需要通过main函数中onCreate来调用,用法如下项目里 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ……}博客里@Override protected void onCreate(Bundle savedInsta...

2021-12-14 09:29:19 1275

原创 building for iOS Simulator, but linking in object file built for iOS, file for architecture arm64

一、问题app在真机能运行,在模拟器不能正常编译,出现报错二、原因字面看是模拟器状态下找不到对应的arm64架构文件,实质是M1芯片的兼容性问题PS:用M1芯片电脑 很多时候会遇到兼容性问题,当常规方案解决不了问题,试着搜索的时候带上关键字M1或许能更快找到答案三、过程网上搜索了很多无非就是需要该配置文件,但是亲测实际只需要2步四、解决方案具体如下2步:4.1 、podfile文件末尾添加以下脚本:然后执行pod install 命令。post_install do |

2021-09-26 23:20:34 6739 2

原创 iOS15新特性、iOS15适配

一、iOS15新特性1.1、iOS15兼容的设备iPhone6S以上,包括SE第一/二代,iPod touch第七代具体6s、6sPlus、7、7Plus、8、8plus、X、XR、XsMax、Xs、11、11Pro、11ProMax、12、12Pro、12ProMax、12mini、13、13Pro、13ProMax、13mini1.2、iOS15新特性专注模式,就是确保用户在一个时间段里屏蔽各种骚扰、非必要的内容不看不听,来提升做其他事情的效率。苹果做了各种细致分类,能进行量身定制。

2021-09-26 16:35:47 4024 1

原创 iOS设置非系统自定义字体- 原生app自定义字体和H5自定义字体

一、App更改自定义字体按照常规方法更改即可(1).将字体文件放入工程(2).在info.plist中增加Fonts provided by application 数组类型,并将添加的字体文件添加(3).找到字体文件对应的具体的我们要用的字体名字let fontFamilies = UIFont.familyNamesfor fontFamily in fontFamilies { let fontNames = UIFont.fontNames(forFamilyName: fo..

2021-05-16 22:27:35 1580

原创 H5与iOS混编 之WKWebView与UIWebView用法区别

一、WebViewView比UIWebView的优点1.WK是iOS8以上推出,目前都是建议用WK2.WK将UIWebViewDelegate和UIWebView封装成了14个类和3个协议3.支持更多的H5特性4.高达60FPS的滚动刷帧率和内置手势5.性能、稳定性、功能都更好,加载网页占内存更少(比如模拟器加载百度占内存23M,只有UIWebView的1/4左右)6.允许JS的Nitro加载并使用二、UIWebView实现交互的方法和原理UIWebView实现H5与iOS混

2021-04-19 09:39:45 539

原创 Flutter执行flutter pub get过程中遇到的问题

一、执行命令路径有问题提示错误:找不到pubspec.yaml文件应该在Flutter项目的根目录下 而不是git clone或Flutter的解决方案:cd flutter项目目录 再执行命令二、电脑配置的Flutter SDK 版本过低提示问题:当前电脑配置的版本是1.7.8+hotfix.4.而项目需要的是大于等于1.12.0小于2.0.0解决方案:flutter upgrade三、Upgrading Flutter卡住不动问题:执行flutter upgrad

2021-03-28 21:10:16 4615 1

原创 H5与iOS混编 之 JavaScriptCore 详解

一、浏览器历史浏览器器对于现代社会人来说再普通不过,可对它的历史了解的人却不多。 1990年 Berners-Lee 发明了 WorldWideWeb 浏览器,后改名 Nexus,在1991年公布了源码。 1993年 Marc Andreessen 的团队开发了 Mosaic,1994年推出我们熟悉的 Netscape Navigator 网景浏览器,同时成立了网景公司。 1995年微软推出了 Internet Explorer 浏览器,简称 IE,通过免费绑定进 Window

2021-03-22 13:45:31 620

原创 RunLoop底层原理

一、RunLoop介绍1.1概念:(关键字:运循 内维事循对事/消 管 对象)运行循环,程序运行过程中循环做一些事情。通过内部维护的事件循环对事件/消息进行管理的一个对象。1.1.2RunLoop休眠实现原理(关键字: 等消息 无线休 有唤醒 用户态->内核态 )等待消息,没有消息就让线程休眠,用户态到内核态切换;有消息就唤醒线程,处理事件,内核态到用户态切换。1.1.3main函数作为启动入口,顺着执行体代码以此执行,最后main函数退出,程序退出。main为什么能保持不退出

2021-03-03 13:57:15 913

原创 OC语言特性

一、分类1.1做了那些事?(关键词:明私、分解、私公开化)声明私有方法,分类头文件放到数组文件.m中,不对外暴露分解体积庞大的类文件 功能复杂的按功能分类framework私有方法公开化1.2特点 (关键词:运决议 系统类加)运行时决议 分类定义好后不立即加到宿主类,而是runtime将分类中内容加到对应宿主类(分类与扩展最大区别)能为系统类添加分类 如坐标获取,UI文件1.3可添加的内容?(关键字:实 类 协 属非实变)实例方法 类方法 协议 属性非实例变量 通过关联对

2021-02-23 22:52:43 341

原创 Mac 屏幕录制 权限 没有可勾选或添加的App选项 产生原因和解决办法

遇到问题:安装软件需要获取截屏和屏幕录制的功能权限,但是发现打开系统设置->安全性与隐私-屏幕录制,右边竟然没有可勾选或可添加的App选项产生原因:经过网络搜索关键字,发现是因为系统升级到10.5,MacCataLina过程中位于/Library/Application Support/com.apple.TCC目录下的TCC.db文件损坏了。期间遇到的错误提示(Error: table access has 7 columns but 12 values were supplied)...

2021-02-22 11:36:10 48578 19

原创 Block 本质、实现原理、内存管理、循环引用、__block等

一、Block介绍1.1概念:将函数及其执行上下文封装起来的对象 底层用struct实现1.2block实现原理:a .新建项目 代码放入file.m中 b.打开终端cd到项目目录下 c.敲clang -rewrite-objc file.m查看编译后的文件内容 本质是将OC重写为C后目录下多了个file.cpp文件1)Block实际上是OC对于闭包(闭包是一个函数或指向函数的指针,再加上该函数执行的外部的上下文变量。)的实现。OC是对C语言的扩展,block的实现是基于函数和指向函数的

2021-02-21 11:42:45 2032

原创 UIView相关总结

CALayer内部创建backingstore(CGContextRef) 一般在drawRect方法中可以通过上下文堆栈取出栈顶的Context,拿到当前视图或控件的上下文,然后该layer会判断是否有delegate,若无则调用[CALyer drawInContext:],若有调用[layer.delegate drawLayer:inContext:]做当前视图的绘制工作,这步发生在系统内部,在合适时机给予一个回调方法[UIView drawRect:],开这个口子允许做一些其他绘制工作;

2021-02-04 07:49:12 486 1

原创 设计模式、架构、框架

一、设计模式1.1概念:一套被反复使用、易理解、保证代码可靠性的代码设计经验的总结;与编程语言无关的成熟的编程思想。1.2六大设计原则:单一职责、开闭、接口隔离、依赖倒置、里氏替换、迪米特1.2.1单一职责原则:一个类只负责一件事。如UIView事件传递、响应;CALayer动画视图显示。1.2.2开闭原则:对修改关闭,对扩展开放。对类的成员变量定义避免反复改;对类的数据结构定义好后提供接口(包括子类继承)1.2.3接口隔离原则:用多个专门协议且协议中方法尽量少,避免一个臃肿庞大的协议。

2021-01-31 22:40:01 332

原创 HTML5写网站遇到问题总结与思考2

1.在body内输入缩写按下tab键,属性用[],文本用{}. # *个数 $依次代表1,2,3,4,5div.类名和div#类名 效果<divclass="abc"></div>,ul>li{名字}*3效果ul里面3个lidiv>a[href='#']{小花}*3效果<div><ahref="#">小花</a>select>option{$}*5效果<select name="" id=""><op

2021-01-30 16:17:47 217

J2ME手机开发入门源代码

J2ME(Java 2 Micro Edition)是专门用于手机等嵌入式设备开发的Java语言,使用J2ME开发的手机程序可在不同的软件和硬件平台上运行。J2ME是手机程序开发初学者首选的开发语言

2010-12-31

100个asp学习教程+10天学会asp

学习asp制作网页.,100个有助于asp学习的教程和让您10天学会asp的软件

2010-12-31

Java2宝典(Java2 Bible)[美]Aaron Walsh Justin Couch Daniel H.Steinberg著

本书为程序员讲解如何使用java语言来开发动态的\分布式的web内容及桌面应用程序(是译本)

2010-10-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除