- 博客(979)
- 资源 (57)
- 收藏
- 关注

原创 (1)目录
一、编程基础[1-1] 编程基础之数据基础[1-2] 编程基础之数据结构[1-3] 编程基础之查找与排序[1-4] 编程基础之类笔试面试题[1-5]编程之美二、Java[2-1] Java之基本知识[2-2] Java之设计模式[2-3] Java之面试宝典三、J2EE[3-1] J2EE之基本知识四、Android[4-1] android之基本知识[...
2015-03-16 09:51:02
6494
1
原创 (2.4.3) Jetpack Compose从零开始
Andorid系统自诞生至今已发展了十几个年头,这期间智能手机无论是硬件规格还是软件形态都发生了巨大变化,Android应用开发技术也在不断进步:从RecyclerView、ConstraintLayout等各种UI控件的引入,到Architecture Components这样的架构工具,甚至连开发语言也从Java切换到了Kotlin但是在UI开发方式上并没有根本变化,仍然是那一套继承自View的组件体系。而View.java本身也变得越发臃肿,目前已超过三万行,早已不堪重负。
2025-07-09 10:08:24
674
原创 (12.2.12) UITabBarController从零开始
UITabBarController是一种容器视图控件,可以管理多个视图控制器,UITabBarController进行管理的视图控制器为并列关系(因此不存在根视图控制器的概念)
2025-07-09 08:45:05
163
原创 (12.2.11.2) 宽高定义
在中,单元格的宽度和高度并不是直接通过定义的,而是通过协议中的方法来定义1. 宽高定义的核心方法的宽高由(1)作用:定义每个单元格的大小(宽度和高度)。参数:当前的集合视图。layout:布局对象(通常是indexPath:单元格的位置索引。返回值:返回一个CGSize,表示单元格的宽高。return CGSize(width: 100, height: 100) // 设置单元格大小为 100x100(2) 其他相关方法除了定义单元格之间的垂直间距(行间距)。默认值为 10。
2025-07-09 08:45:02
607
原创 (12.2.11)UICollectionView从零开始
swift// 自定义布局逻辑6. 补充视图和装饰视图(1) 补充视图(Supplementary Views)用于展示分节头(Header)和分节尾(Footer)。需要实现方法。
2025-07-09 08:44:55
560
原创 (12.2.9)UIScrollView从零开始
适合展示静态内容或需要自定义布局的滚动视图。是一个容器视图,可以包含任意数量的子视图。设置内容的内边距(通常用于调整滚动区域的可见部分)。控制即使内容不足以滚动,是否仍然允许垂直或水平反弹。,可以实现复杂的滚动和缩放功能,满足各种界面需求。获取或设置当前滚动位置(相对于内容的偏移量)。提供了一系列回调方法,用于响应滚动事件。返回需要缩放的视图(必须实现代理方法)。实现下拉刷新功能(iOS 10+)。定义可滚动区域的内容大小(宽高)。用户开始拖动滚动视图时调用。设置滚动视图的代理(遵循。
2025-07-09 08:44:29
630
原创 (12.2.8)IOS基础组件从零开始
对于自动纠正或者建议词汇替换等情况,系统可能会询问是否替换现有文本: (BOOL)textView:(UITextView *)textView shouldReplaceTextInRange:(NSRange)range withText:(NSString *)text;
2025-07-08 13:48:47
269
原创 (12.2.7)Snapkit布局
需要注意的是,描述 view 与 superview 关系时,应该使用 inset,而描述 view 与同一层级的其它 view 时,应该使用 offset。是一个用于简化 Auto Layout 的第三方库,它通过链式语法和更直观的方式替代了原生的。设置约束的优先级(Priority),范围为 1 到 1000,默认为 1000(高优先级)。,您可以快速实现复杂的布局,并提高代码的可读性和维护性。设置视图的尺寸或位置大于等于或小于等于另一个视图或值。设置视图的中心点相对于父视图的水平或垂直中心对齐。
2025-07-08 13:48:13
793
原创 (12.2.6) IOS布局从零开始
iOS 的布局系统虽然没有像 Android 那样明确区分不同的布局容器,但通过。等),但可以通过约束(Constraints)和视图层次结构实现类似的功能。定义视图的左边缘或右边缘相对于父视图或其他视图的位置。,可以实现类似的功能。定义视图的顶部或底部相对于父视图或其他视图的位置。定义视图的中心点相对于父视图或其他视图的位置。设置视图的尺寸或位置大于等于另一个视图或值。设置视图的尺寸或位置小于等于另一个视图或值。- 子视图可以根据其他视图的位置进行定位。设置视图的尺寸或位置等于另一个视图或值。
2025-07-08 13:47:36
678
原创 (12.2.5) UINavigationController从零开始
OS应用开发中的导航采用的是的设计模式。UINavigationController用于处理多个控制器为层级结构的情况,层级结构的界面之间往往有一些或多或少的关联,可进行交互与传值等。
2025-07-08 13:47:06
916
原创 (12.2.1) IOS从零开始
将Foundation框架中的类进行逻辑分类可以分为一下几类:值对象、集合、操作系统服务(文件系统、URL、进程通信、线程和子任务)、通知、归档和序列化、表达式和条件判断、Objective-C语言服务。iOS中,Cocoa的框架中最重要最基本的两个框架是Foundation和UIkit,和界面无关的基本类的属于Foundation框架,uikit框架是和界面相关的。什么是Cocoa呢?Cocoa是OSX和iOS操作系统的程序的运行环境。Cocoa由对象组成,而这些对象都继承自NSObject类。
2025-07-08 13:44:09
420
原创 (12.1.3)Swift从零开始
Swift的引入是引入一个Module,而不是一个具体类/* 我的第一个 Swift 程序 */我们可以使用import语句来引入任何的 Objective-C 框架(或 C 库)到 Swift 程序中。例如语句导入了使用了 Cocoa 库和API,我们可以在 Swift 程序中使用他们。Swift 没有传统的预处理器,但通过条件编译和内置的全局常量,可以实现类似的功能。条件编译:使用#if#else和#endif来根据平台、版本或自定义标志编写代码。预定义宏:如#file#line#function。
2025-07-08 13:42:11
592
原创 (12.1.2) OC 从零开始
如果有C语言的基础其实学Objective-C来会很快其实Objective-C和Java都属于基础性的面向对象语言,基础类型和封装类型、变量显式声明,接口和继承、动态反射、一样没有一些高级语言的不支持类型推测、不支持特殊表达式等等同时对比Java, 少了泛型、抽象类等特定概念,但是OC多了指针概念从而灵活性更大了,可以进行概念的模拟,而且支持块从而可以模拟高级函数的概念,支持扩展和类别Objective-Objective-C是C语言的严格超集--任何C语言程序不经修改就可以直接通过Objective-C
2025-07-08 13:40:47
634
原创 (2.4.2.4) Kotlin JSON
为了简化操作,可以定义一个扩展函数来实现新增键的功能。Kotlin Serialization 支持自定义序列化和反序列化的属性名,通过注解实现。我们上面介绍的可以给一个字段设置一个在 Json 中的名字,但同时这个字段本身的名字就无法被解析了。而@JsonNames注解可以给字段设置多个名字,并且这个字段原本的值仍然可以被解析。less代码解读复制代码@Serializable另外,对@JsonNames注解的支持由标志控制。与大多数配置标志不同,此标志默认启用。
2025-07-08 11:55:14
378
原创 (2.4.2.3)Kotlinx Serialization
序列化和反序列的库,它可以将对象树序列化成一些常见的格式,纯天然支持 Kotlin,扩展性很强,几乎可以满足所有业务场景,而且不需要使用反射,性能很好,可以说是目前 Kotlin 语言序列化工具的不二之选。kotlin Serialization 是 Kotlin 提供的。
2025-07-08 11:54:11
136
原创 (2.4.2.2) 协程流Flow
/ 用于新订阅者申请使用当前AbstractSharedFlowSlot类型的对象// 返回true代表申请成功,返回false代表申请失败// 用于订阅者释放当前使用的AbstractSharedFlowSlot类型得到对象,// 并以数组的形式返回待恢复的续体在SharedFlowImpl中,当有新的订阅者出现时,会为它在订阅者数组中分配一个类型为SharedFlowSlot的对象。// 表示将要在处理的数据在数组中的索引// 如果为-1,表示当前可用@JvmField。
2025-07-08 11:48:22
633
原创 (2.4.2.1)协程->任务
协程是可挂起计算的一个任务实例,用一个代码块表示从概念上讲,它类似于线程。从某种意义上说,它需要一个代码块来运行,该代码块与代码的其余部分同时工作。但是,协程不绑定到任何特定线程。它可能会在一个线程中暂停执行,并在另一个线程中恢复执行。协程如果不配置线程,默认在当前线程跑,只不过实现了并发控制规避回调地域。协程的挂起函数(如delay)在底层确实依赖 回调机制,但通过编译器和运行时将其隐藏,开发者无需手动处理回调。具体实现方式kotlin协程本质上是在线程池基础上对回调机制的一套封装。
2025-07-08 11:47:24
863
原创 (2.4.2) Kotlin从零开始
可点击查看了解目前自己当前kotlin版本对应的协程库版本源文件通常以包声明开头: 源文件所有内容(无论是类还是函数)都包含在该包内。 所以上例中 的全名是 , 而 的全名是 。 如果没有指明包,该文件的内容属于无名字的默认包1.1.1 Kotlin官方库有标准库的多个包会默认导入到每个 Kotlin 文件中:根据目标平台还会导入额外的包:Kotlin 应用程序的入口点是 函数: 的另一种形式接受可变数量的 参数: 将其参数打到标准输出 输出其参数并添加换行符,
2025-07-08 11:43:41
1017
原创 (3.2.1)写给客户端同学的CSS和JS入门
踩坑块元素width的默认值是父元素的100%,一般情况下不用设置就可以满足需求。height的默认值是里面内容的高度,也就是auto,一般写代码的时候也不需要给元素设置高度,如果设置了高度而且设置的高度不够的时候,就会出现元素重叠的情况重叠外面一层 position:relative;里面的 position:absolute 就可以width:100% 会导致滚动高度...
2025-06-16 16:40:05
1032
原创 (4.1.29.3)ViewModel替代VC沟通者
对于简单的数据,Activity 可以使用onSaveInstanceState() 方法从 onCreate() 中的捆绑包恢复其数据,但此方法仅适合可以序列化再反序列化的少量数据,而不适合数量可能较大的数据,如用户列表或位图,使用ViewModel可以解决这个问题。
2023-11-23 20:05:53
915
原创 MJ从零开始
announcements 公告频道:基本就是 David Holz 在发布,重要的版本更新和社区活动都可以在这里得到及时的通知,是每次有新消息我都一定会 check 的频道。#micro-polls 投票频道:每次 Midjourney 需要做小的调查,比如某个功能的效果反馈、活动举办的喜好调查、office hour 的时间调查,都会在这里进行。#feedback 反馈频道:使用上有什么问题或意见可以都到这个频道里进行留言。
2023-04-21 17:00:45
42
原创 GPT从零开始
Prompt:提示我们向 AI 提供一组指令(提示),然后它执行任务。提示可以简单到一个问题,也可以复杂到多个段落如何同人工智能交流,并得到你要的结果。随着最近人工智能的不断进步,提示工程这项技能变得越来越重要。
2023-04-18 15:07:38
44
原创 (4.6.15.4)Choreographer全解析
一、前情提要1.1 测绘流程的起点我们在4.1.37.1)深入理解setContentView过程和View绘制过程一文中,我们讲到了测绘流程的起点是在—ViewRoot类的requestLayout()方法—scheduleTraversals()—mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null)请求刷新信号—mChoreographer内部handler通过msg机
2021-05-13 12:26:21
674
原创 (4.1.10.8)Android Handler之同步屏障机制(sync barrier)
一、概述简单理解为 异步消息插队并优先执行。场景:排队买票先来了一个普通用户来排队,买完票走了。后面又来了一个VIP用户A来买票 就一直站在卖窗口这里 也不走(ps:添加屏障 )紧接者又来了一个普通用户C,再后面又来了VIP用户BVIP A 对VIP B 说,哥们不要排队直接来窗口买票,VIP B买完票走了,VIP A 被 某个哥们叫走了(移除屏障)这个时候终于轮到普通用户C买票了。二、系统应用简单的来说就是优于事件回调执行,为了做一些优先级更高的操作 比如 视图刷新。当一个Ha
2021-05-13 11:46:37
597
原创 (4.6.14.6)Android App Bundle动态化方案
文章目录一、Google减少应用包体积方案演进1.1 单APK时代1.2 Multiple APK1.3 Android App Bundle1.3.1 dynamic feature1.3.2 Split APKs(Android5.0)1.3.2.1 PackageInstaller1.3.3 Split APKs加载原理1.3.3.1 ClassLoader1.3.3.2 Resources1.3.3.3 不支持四大组件的新增1.3.3.4 多进程问题二、爱奇艺动态化框架Qigsaw2.1 背景知识2
2021-01-12 13:57:23
931
转载 (4.1.27.5)App为什么会crash?事情没有你想得那么简单
https://mp.weixin.qq.com/s/66P1Q7QKEBzJ1ORxmiXdJA
2021-01-08 17:00:07
14
转载 (4.1.29.2)Jetpack新成员,App Startup一篇就懂
Android 11系统已经来了,随之而来的是,Jetpack家族也引入了许多新的成员。其实以后Android的更新都会逐渐采用这种模式,即特定系统相关的API会越来越少,更多的编程API是以Jetpack Library的形式提供给我们的。这样我们就不需要专门针对不同的系统版本去写很多的适配逻辑,而是统一用Jetpack提供的接口即可。Android也是在用这种方式去解决长期以来的碎片化问题。而今年的Jetpack家族当中又加入了两名重磅的新成员,一个是Hilt,另一个是App Startup。
2020-08-25 10:29:23
250
原创 (4.1.29.1)LiveData数据驱动者
一、概述简单地说,LiveData是一个数据持有类。它具有以下特点:数据可以被观察者订阅;能够感知组件(Fragment、Activity、Service)的生命周期;当数据变化时,只有在组件出于激活状态(STARTED、RESUMED)才会通知观察者有数据更新;文中提到的“组件”皆指实现了LifecycleOwner接口Fragment、Activity。1.1 为什么需要LiveData从LiveData具有的特点,我们就能联想到它能够解决我们遇到的什么问题。LiveData具有以
2020-08-20 17:10:13
282
转载 (4.0.22.12)Android AsyncListDiffer-RecyclerView最好的伙伴
自Android5.0以来,RecyclerView渐渐取代ListView成为Android开发中使用最多的列表控件,对于RecyclerView的使用相信大家都不陌生,但对于RecyclerView的高效刷新,却是很多人不知道的。简单粗暴的刷新方式Adapter.notifyDataSetChanged();这种方式想必是大家曾经用的最多的一种刷新Adapter的方式,它的缺点很明显:无脑刷新整个RecyclerView可视区域,每个item重绘,如果你的onBindVie..
2020-08-20 11:39:11
418
转载 (4.1.29)Android-Lifecycle详解
文章目录一、概念二、使用2.1 添加依赖:2.2 实现LifecycleObserver接口2.2.1 Java1.7使用LifecycleObserver2.2.2 Java1.8使用DefaultLifecycleObserver2.3 将LifecycleObserver添加到Lifecycle的观察者列表三、优势场景举例3.1 自定义生命周期函数+自己调用转发3.2 使用Lifecycle四、源码解析4.1 State状态 和 Event事件4.2 Activity/Fragment的生命周期触发s
2020-08-20 11:29:04
317
原创 (4.1.10.7)Android IdleHandler 原理浅析
问:什么是 IdleHandler?有什么用?怎么用?答:IdleHandler 可以用来提升性能,主要用在我们希望能够在当前线程消息队列空闲时做些事情(譬如 UI 线程在显示完成后,如果线程空闲我们就可以提前准备其他内容)的情况下,不过最好不要做耗时操作。具体用法如下。//getMainLooper().myQueue()或者Looper.myQueue()Looper.myQueue().addIdleHandler(new IdleHandler() { @Overrid.
2020-08-16 11:57:32
216
原创 (4.1.10.6)Handler是怎么做到消息延时发送的
1、postDelay()一个10秒钟的Runnable A-----消息进队----Loop消费---发现没有即时信息了----MessageQueue调用nativePollOnce()阻塞,Looper阻塞;2、紧接着post()一个Runnable B---消息进队----Loop消费---判断现在A时间还没到、正在阻塞,Handler把B插入消息队列的头部(A的前面),然后调用nativeWake()方法唤醒线程;3、MessageQueue.next()方法被唤醒后,重新开始读取消息链表,第
2020-08-16 11:26:32
216
转载 (2.1.4.1)刨根问底HTTP与WebSocket的关系
本文整理自简书作者“TheAlchemist”的技术文章,内容有修订。感谢原作者,原文链接在文末。 1、前言 本文的上篇《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》介绍了HTTP1.1协议的基本内容,这篇文章将继续分析WebSocket协议,然后对这两个进行简单的比较。 2、系列文章 本文是系列文章中的第5篇,本系列文章的大纲如下: 《WebSocket详解(一):初步认识WebSocket技术》...
2020-08-03 22:45:16
303
安阳工学院--软件工程复习指南
2012-11-16
进程保活(一:JNI层初探):单向循环式启动服务
2016-07-23
会议室系统jsp课程设计
2012-12-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人