自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IOSSHAN的博客

坚持原创

  • 博客(255)
  • 收藏
  • 关注

原创 优秀的iOS博客

收集一批优秀的iOS博客,不断更新招聘一个靠谱的 iOS百度大佬出的一些面试题唐巧的博客 做iOS的没几个不知道他的杨萧玉 哈工大毕业,腾讯大佬招聘一个靠谱的 iOS百度大佬出的一些面试题《招聘一个靠谱的iOS》面试题参考答案 有问就有答...

2020-05-25 15:18:07 563

原创 坚持写博客

之前自己学习工作中很少去写博客,一是懒(嗯,最主要的),二是觉得自己遇到不会的问题可以上网搜一下,虽然有的答案明显就不对,但是,你找半天,总会找到解决方法。再有就是学习新的东西,也是自己网上找找博客就可以了,人家都写过了,干嘛还要自己写呢?大家写来写去都是那些东西,又有什么意思呢?后来,在聊天群里看到了这张图瞬间觉得,博客,还得写!写博客不仅是让别人看,让别人少走弯路,更重要的是,自己的总结...

2019-03-22 09:42:39 287

原创 Swift知识点---RxSwift学习

RxSwift是Swift函数响应式编程的一个开源库,由Github的ReactiveX组织开发、维护RxSwift的目的是:让数据/事件流 和 异步任务能够更方便的序列化处理,能够使用Swift进行响应式编程RxSwift本质上还是观察者模式,并且是一个响应式的,并且可以序列化的。

2024-09-06 09:54:46 1033

原创 SwiftUI知识点(五)--- SwiftUI Continued Learning

方法一中的只改变内部内容的位置,而不会改变整个视图框架的尺寸,因此在maxWidth修改后它产生的效果并不明显,无法正确地左对齐文本。方法二将宽度和对齐方式合并在一个修饰符内,使得框架的尺寸变化和内容对齐同时生效,因此可以正确地使文本左对齐。

2024-08-28 11:32:25 702

原创 SwiftUI中,@State、@Binding、@Environment、@ObservedObject、@StateObject、@EnvironmentObject的用法与区别

State: 用于局部状态管理,适用于单一视图。@Binding: 用于在视图之间双向绑定状态,适用于父子视图之间的状态共享。: 用于访问环境中的共享值,适用于依赖上下文或全局设置的视图。: 用于监视外部提供的状态对象,适用于多个视图共享的状态。: 用于在视图中创建并持有状态对象,适用于初始化和管理的情况。: 用于全局共享的状态对象,适用于应用中广泛使用的状态管理。: 用于视图观察外部的,当对象的属性变化时会重新渲染视图。它不像通知那样松耦合,更加结构化。: 用于在视图内部声明和持有一个。

2024-08-20 09:53:25 1219

原创 SwiftUI中,各种表格的作用、区别与选择

List: 用于展示单列或多列的垂直列表。Form: 用于输入表单布局。Table: 用于显示多列数据表格(iOS 16+)。LazyVGridLazyHGrid: 用于灵活的网格布局。ScrollView: 用于自定义表格布局,适合复杂布局。根据具体的需求和项目要求,你可以选择最合适的控件来展示你的数据。每个控件都有其优势,在合适的场景中能够发挥最大的作用。

2024-08-15 09:23:58 425

原创 SwiftUI知识点(四)

【代码】SwiftUI知识点(四)

2024-07-29 18:28:15 196

原创 SwiftUI知识点(三)

可以在Assets文件夹下,建立自定义颜色(两种模式下都有颜色),从而达到一种颜色值,两种不同的显示。黑白是不适应的,即黑色在暗黑模式下黑色背景下不显示、白色在正常模式白色背景下不显示。可以将滑块线做成随着滑动距离而现实不同的颜色,超级炫酷~明明显示两个,count应该是2或者3,怎么是4呢?其他颜色,比如红、黄、绿,在这两种模式下都可以显示。监听对象的改变,并且在view刷新的时候,不会改变。监听对象的改变,并且在view刷新的时候也会改变。没事,运行起来显示的就是2。也可以在本地做判断,利用。

2024-07-23 16:45:44 338

原创 SwiftUI知识点(二)

应该输出两个Text,即Text(123),Text(456),加上之前的Text(123),此时有:Text(123),Text(123),Text(456)这是因为:swiftUI的视图是声明式的,在状态改变的时候,重新渲染视图,渲染的内容只有新的部分,即Text(456)再输入456,点击save,此时,for循环变量,拿出数组的值,而数组有两个元素[“123”, “456”]比如我先输入123,点击save,则有一个Text(123)而实际上,只有Text(123),Text(456)

2024-07-08 15:43:18 471

原创 SwiftUI知识点(一)

VStack {Text("今天吃什么?").font(.largeTitle)//字体大小.fontWeight(.semibold)//字体样式.bold()//粗体.underline(true, color: Color.red)//下划线.italic()//斜线.strikethrough(true, color: Color.green)//穿过线.foregroundStyle(.purple)//颜色。

2024-06-02 22:44:41 1193 1

原创 Swift知识点(五)

以上几种方法,都是自定义函数方法,哪用去哪写这种方法,属性名没有特殊标识,有可能String里面有一个numberCount,会造成覆盖因此,最好命名为,这种好改如果可以这样调用更好,看着像是私有库里面的方法这种做法好是好,但还有缺点,只有String的扩展,如果以后是数组或者其他类型求里面的数字个数,还要写其他的。上述,使用泛型,做到不需要一个类型写一种样式但,多个类型有公共特点,可以抽出来,但不适用抽父类,因为,有结构体、有类,Dog跟Person也没有关系。

2024-05-23 13:35:49 722

原创 Swift知识点(四)

通过汇编打断点,可以看出在Swift中调用OC的方法,还是使用的runtime那一套在OC中调用Swift的方法函数,由于已经是继承NSObject,因此,还是走的runtime那一套。

2024-05-17 18:15:12 1087

原创 Swift知识点(三)

可以自定义新的运算符:在全局作用域使用operator进行声明比如:prefix operator 前缀运算符就是定义了一个自定义运算符+++,实现前缀运算。

2024-05-16 08:35:08 767

原创 iOS原生与H5交互方法

在使用UIWebViewUIWebView已经被苹果弃用,推荐使用WKWebView),可以使用方法来执行JavaScript代码。

2024-04-19 11:12:04 1604

原创 关联对象介绍

定义一个中间对象由于不直接支持weak关联,你可以通过创建一个中间对象来持有实际的弱引用。这个中间对象将有一个weak属性,用于指向你想要弱引用的对象。@end@end在分类中使用关联对象在分类中,使用和来分别设置和获取这个中间对象,从而间接实现了一个弱引用的属性。

2024-04-03 12:32:26 1091

原创 Delegate介绍

首先定义一个协议,声明需要多个对象响应的方法。@optional@end首先,定义一个事件协议,该协议包含委托者将调用的方法。@end@end@end@end@optional@end这个协议声明了一个方法,任何想要监听事件的代理都应该实现这个方法。

2024-04-02 19:04:39 1243

原创 SDWebImage源码解析---疑难问题解答

SDWebImage的简单流程图:网上有大佬做了这个图,供参考:源码看了一遍,写的很好,具体源码分析就不写了,后面会列出一些写的源码不错的文章。

2024-04-01 20:40:14 886

原创 Mach-O、Universal Binary、虚拟内存等简介

Mach-O:Mach Object,是Mac\iOS上用于存储程序、库的属于Mach-O格式的文件类型有:11种0x10x20x30x40x50x60x70x80x90xa0xb。

2024-03-31 11:19:15 837

原创 NSString有哪些创建对象的方法?创建的对象分别存储在什么区域?

这种情况通常发生在几种特殊对象上,这些对象由于各种原因,被系统视为“永久存活”的,直到应用程序结束。在现在的版本中,为了保证数据安全,苹果对 Tagged Pointer 做了数据混淆,开发者通过打印指针无法判断它是不是一个Tagged Pointer,更无法读取Tagged Pointer的存储数据。所以在分析Tagged Pointer之前,我们需要先关闭Tagged Pointer的数据混淆,以方便我们调试程序。并不表示实际的引用计数值,而是一个标志,表明这个对象是由系统以特殊方式管理的。

2024-03-27 20:24:26 572

原创 Swift知识点(二)

通过汇编打断点,可以看出在Swift中调用OC的方法,还是使用的runtime那一套在OC中调用Swift的方法函数,由于已经是继承NSObject,因此,还是走的runtime那一套。

2024-03-22 15:01:31 1253

原创 iOS常见崩溃简介

多指在移动设备(如iOS、Android设备)中或不可移动设备(如:Windows、Linux等设备),在打开或使用应用程序时出现的突然退出中断的情况(类似于Windows的应用程序崩溃)。多表现为:应用程序画面一闪而过,随即退回到桌面。崩溃会影响用户体验,造成用户流失,因此,我们要重视崩溃根据不同场景,崩溃收集方式不同。

2024-03-17 13:18:33 2196

原创 iOS图片占内存大小与什么有关?

图片所占内存大小,与图片的宽高有关我们平时看到的png、jpg、webp这些图片格式,其实都是图片压缩格式。通过对应的算法来优化了大小以节省网络传输与本地保存所需的资源。但是当我们加载图片到内存中将要显示出来的时候是不能使用压缩格式,这样就不能显示图片了。计算机依赖每一个像素点中的数据来显示图片。例如iOS中的UIImange的每个像素点是由red+green+blue 三原色在加上alpha透明度组成的。三原色每一个的范围在0 ~ 255所以需要来存储一个值的大小。

2024-03-15 19:21:18 1272 1

原创 查找数组元素相同的最后一组数组的第一个下标

需求:查找y数组,找出与x数组相同项(相同项可能有多组),找最后一组,并返回最后一组的第一个元素的下标。

2024-03-05 12:51:15 291

原创 Flutter学习笔记(二)---Dart语言学习

这节我们学习下Dart语言的主要语句需要说明的是,文章只做主要的摘录具体参考:Dart 编程语言概览可以在线运行Dart语句的编译器DartPad在 Dart 中一切都是对象,数字类型 也不例外主函数main(){ print("你好啊");}定义一个变量可以使用:明确声明和隐私声明main(){ //明确变量类型 String name = "你好"; //隐私声明 var name2 = "nihao222"; print("$name, $name2")

2024-03-02 12:40:04 532 1

原创 iOS卡顿原因与优化

卡顿: 指用户在使用过程中出现了一段时间的阻塞,使得用户在这一段时间内无法进行操作,屏幕上的内容也没有任何的变化。卡顿作为App的重要性能指标,不仅影响着用户体验,更关系到用户留存、DAU等重要产品数据。因此,需要关注APP的卡顿首先,屏幕上看到的所有内容都是计算机绘制出来的图像帧率:Frames Per Second(fps),表示每秒渲染帧数,通常用于衡量画面的流畅度,每秒帧数越多,则表示画面越流畅。通常,60fps比较流畅,也就是60张/秒,每张图片需要的渲染时间大约是:1s/60张 = 1000

2024-03-01 10:26:41 2023 1

原创 剑指 Offer 40.最小的k个数

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

2024-01-19 11:41:56 411

原创 关于OC中变量相关知识点

众所周知,变量是用来存储数据的围绕着变量,有很多知识点,总结归纳一下。

2024-01-18 17:30:03 1141

原创 剑指 Offer 39.数组中出现次数超过一半的数字

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:nums = [3,2,3]输出:3示例 2:输入:nums = [2,2,1,1,1,2,2]输出:2提示:进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

2024-01-17 11:55:03 599

原创 剑指 Offer 38.字符串的排列

输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串:abc、acbbac、bcacab、cba。

2024-01-15 14:33:39 420

原创 剑指 Offer 37. 序列化二叉树

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。

2024-01-14 14:02:43 423

原创 剑指 Offer 36. 二叉搜索树与双向链表

将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表。对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。特别地,我们希望可以 就地 完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中最小元素的指针。示例 1:输入:root = [4,2,5,1,3]输出:[1,2,3,4,5]解释:下图显示了转化后的二叉搜索树,实线表示后继关系,虚线表示前驱关系。

2024-01-14 10:41:50 410

原创 数据结构与算法---在一个数组中找出相同个数最多的数

面试中被问到的:在一个数组中找出相同个数最多的数,[1, 1, 1, 2, 2, 3]返回1。

2024-01-13 16:21:44 561

原创 《C语言学习》---郝斌版---笔记

变量的本质就是内存中一段存储空间数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。1字节(Byte) = 8位(bit)1bit就是二进制的0和1计算机能够处理的最小单元是 字节 而不是位位,是由软件通过位运算符操作的1个英文字母(不分大小写)占一个字节的空间D十进制 B二进制 O八进制 H十六进制。

2024-01-12 11:35:30 1310

原创 安卓开发学习---kotlin版---笔记(三)

安卓主页的网络框架:OkHttp在OkHttp的基础上进行封装的:Retrofit框架,更常使用。

2023-12-19 19:55:08 694

原创 安卓开发学习---kotlin版---笔记(二)

使用:recyclerView) {//找到recyclerView//管理者,负责列表的布局//创建一个adapter,负责数据的适配//找到item//个数return 20//负责列表的复用。

2023-12-17 19:29:40 556

原创 安卓开发学习---kotlin版---笔记(一)

上次学习安卓,学了Java开发,简单的搭了几个安卓界面。这次要学习Kotlin语言,然后开发安卓,趁着还年轻,学点新东西,坚持~

2023-11-28 20:11:07 618

原创 《微信小程序从入门到精通》---笔记1

hr >:一条分割线对于 HTML,您无法通过在 HTML 代码中添加额外的空格或换行来改变输出的效果。当显示页面时,浏览器会移除源代码中多余的空格和空行。所有连续的空格或空行都会被算作一个空格相当于,不管屏幕多大,都分为750分,按照UI给的图,直接写就行,不需要适配屏幕了。貌似比较高级。

2023-11-24 21:30:27 718

原创 JAVA笔记(五)---再学习

嵌套类(Nested Class)什么是嵌套类?定义在另一个类中的类,被称为嵌套类 public class OuterClass { //静态嵌套类 static class StaticNestedClass { } //非静态嵌套类(也称为:内部类) class InnerClass { } }在嵌套类外层的类,称为:外部类(Outer Class)最外层的外部类,称为:顶级类(Top-level Class)内部类(Inner Class)内

2023-04-14 09:31:05 749

原创 web学习---Vue---笔记(1)

H5的组件,是把某一个模块封装,里面写HTML\CSS\JS等,算是一个页面里面的某个模块。在firstName.slice(0, 3)里面,仅仅是截取前三位的需求,如果里面还有各种sao操作,那。使用v-bind,会将url字符串,看成表达式执行,替换为data里面的key为url的value值。只传一个参数,并且该参数是一个对象类型(对象类型,使用{}),该对象被称为。vm身上所有的属性,及Vue原型上所有属性,在Vue模板中都可以直接使用。拿现有的属性,去加工、计算,生成一个全新的属性。

2023-04-04 14:39:45 477 1

原创 web学习---Vue---笔记(二)

通过props向子组件传递数据通过事件向父组件发送下消息-- 值绑定 -- > <!-- < cpn v - bind : cmovies = "movies" > < / cpn > -- > < cpn : cmovies = "movies" > < / cpn > < / div > < template id = "cpn" > < div > < h2 > 我是标题 < / h2 > < p > 我是内容,呵呵呵 < / p > {

2023-04-04 14:39:31 424

空空如也

空空如也

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

TA关注的人

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