自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 isa方法列表测试(含Demo)

isa方法列表测试

2016-08-23 18:40:11 1144

原创 UIView的init与initWithFrame的调用顺序

UIView的init与initWithFrame的调用顺序

2016-08-18 17:40:29 3280

原创 UIScrollView高级用法:delaysContentTouches与canCencelContentTouches属性

UIScrollView高级属性,delaysContentTouches,canCencelContentTouches,

2016-08-17 16:20:49 5503

原创 XCode16 在Other LInker Flags中,添加-ld64与不添加,有什么区别?

只有在遇到问题时再切换回旧版链接器。如果仍有疑问,请提供更多具体的错误信息或上下文,我可以为您提供更有针对性的建议!在以下情况下,您可能需要在。在 Xcode 16 中,与不添加的主要区别在于。如果您不确定是否需要添加。以下是判断是否需要添加。,可以先尝试默认使用。

2025-03-25 16:51:31 389

原创 Project、Workspace、Target、Module相互的依赖关系

在iOS开发中,Project、Workspace、Target 和 Module 是不同层次的概念,它们的定义范围大小和依赖关系如下:从大到小排序:Workspace范围最大,可以包含多个 Project 和共享的构建环境。用于管理多个相关 Project 的协作和依赖。Project包含一个或多个 Target 和 Module。是代码、资源和构建设置的基本组织单元。Target是 Project 中的一个具体构建目标,定义了如何生成一个产品(如App、Framework)。一个 Project 可以有

2025-02-25 15:45:30 550

原创 中介者模式(Mediator Pattern)、桥接模式(Bridge Pattern) 和 策略模式(Strategy Pattern)

模式目的/特点使用场景Swift 示例中介者模式降低类之间的耦合,通过中介者来协调交互多个对象之间存在复杂交互时,避免直接引用其他对象聊天系统中用户通过中介者交换消息桥接模式将抽象和实现分离,允许它们独立变化抽象部分和实现部分变化频繁的场景图形绘制系统,不同的形状和绘制方式策略模式将算法封装成独立的策略类,使得算法可以互换需要根据不同情境使用不同算法的场景排序算法的选择,可以动态切换不同的排序策略这些设计模式帮助解决不同类型的耦合问题,允许我们编写更加灵活、可扩展、可维护的代码。

2024-12-29 22:09:42 619

原创 数据量或带宽单位

1 Mbps和1 Mb/s是完全相同的,它们都代表每秒1,000,000 比特的传输速率。。。因此,1 MB/s并不是1024 KB/s,而是1000 KB/s(按照十进制表示)。

2024-12-29 13:30:57 940

原创 iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针-优快云博客

2024-12-28 11:48:47 909

原创 iOS组件化

修改,已经有Swift版本,CTMediator。

2024-12-26 13:26:01 407

原创 iOS开发,线上问题/crash如何排查

线上问题的排查是一个多方面的工作,涉及到工具的使用、日志分析、用户行为追踪以及多种测试方法。分析崩溃报告和日志。使用性能分析工具(如 Instruments)来排查性能瓶颈。跟踪用户行为,发现潜在的用户操作问题。网络抓包和调试,确认请求和响应的正确性。重现线上问题,找到可能的根本原因。通过这些方法,我们可以有效地定位线上问题并尽快修复,提高用户体验。没有堆栈信息的崩溃问题排查,通常需要综合多种手段和工具,如崩溃日志分析、性能分析、内存管理工具、线程分析、重现步骤排查、代码审查等。

2024-12-23 12:08:54 1156

原创 Swift Type Erasure(类型擦除)

*类型擦除(Type Erasure)**的核心思想就是将泛型类型封装成一个类型擦除对象,该对象不再暴露泛型类型的具体实现细节,而是保留协议的接口。这样一来,泛型类型就可以与其它类型协作,像普通的类型一样被存储和操作。在 Swift 中,使用类型擦除可以将泛型协议封装成一个固定类型,隐藏类型的具体细节,使得协议的使用更加灵活。add(_:)用于添加一个Itemget()用于获取一个Item。和。?0?""和都遵循了Container协议,但它们分别持有不同类型的元素(Int和String。

2024-12-19 21:09:39 789

原创 Swift 的动态性

Swift 的动态性主要通过动态派发、反射、类型检查、动态成员查找等特性实现。虽然 Swift 是一门静态类型的语言,但它也提供了许多动态特性,使得在某些特定场景下,可以像动态语言一样进行编程。这些动态特性尤其在与 Objective-C 代码交互时,或者在需要灵活处理不确定结构时,能够极大地增强开发者的灵活性。不过,Swift 中的动态特性通常是基于 Objective-C 运行时(如@objc)的支持,因此在纯 Swift 代码中动态性相对有限。

2024-12-19 15:03:21 1025

原创 iOS 应用的生命周期

活跃状态(Active)应用处于前台,并正在运行,用户可以与应用交互。应用的 UI 是可见的,且可以接收用户输入。相关方法:应用从后台或非活跃状态进入前台,恢复活动状态时调用。:应用从后台进入前台,但尚未恢复活跃状态时调用。非活跃状态(Inactive)应用仍然处于前台,但由于一些事件(例如电话呼入、系统通知)应用未能响应用户输入。应用 UI 是可见的,但无法进行交互。相关方法:应用将进入非活跃状态时调用,通常是因为电话来电、用户锁屏等原因。后台状态(Background)

2024-12-17 16:01:45 1232

原创 如何避免回调地狱;多个并发任务完成后处理结果

闭包链式调用:通过在闭包中执行下一步操作来避免回调地狱。:通过来并行执行多个异步任务并等待它们的完成。:在 Swift 5.5 引入的特性让异步编程变得像同步编程一样简单。Combine:利用 Combine 框架的操作符来处理多个异步任务,避免深层嵌套。Result类型:封装每个异步任务的结果,以便优雅地处理错误。这些方法不仅能提高代码的可读性和可维护性,还能让你以更加现代化的方式进行异步编程。:适用于等待多个并发任务完成后进行处理,使用enter()leave()和notify()。

2024-12-10 13:52:14 632

原创 协议编程解决钻石继承问题

钻石继承问题发生在传统的多重继承中,但 Swift 使用协议(Protocol)来避免这一问题。协议是接口规范,不会引入复杂的继承链。通过协议扩展,协议可以为遵循它的类型提供默认实现,进一步简化代码并避免继承问题。使用协议的方式实现了灵活的多重约定,而不会遇到钻石继承带来的冲突和复杂性。Swift 通过协议和协议扩展的设计模式解决了传统 OOP 中的钻石继承问题,并且使得代码更加模块化和可维护。

2024-12-02 15:42:06 639

原创 锁-读写锁-Swift

【代码】锁-读写锁-Swift。

2024-12-02 15:37:15 360

原创 npm config set registry命令

注意:请根据实际需求选择合适的registry地址,并替换上述命令中的。内容:registry=https://xxxx.abc.com。你可以在你的项目根目录或者用户的home目录下创建或修改。一、npm config set registry命令。解决方案3:查看当前配置的registry。命令用于设置npm的包注册表地址。为你的实际需要安装的包和镜像地址。解决方案1:设置为官方npm仓库。解决方案2:设置为淘宝npm镜像。解决方案5:使用命令临时设置。你可以在执行npm命令时使用。

2024-08-27 19:49:05 9887 2

原创 iOS卡顿优化

怎么优化下面场景离屏渲染的情况 图层阴影(Shadow):设置图层的 shadowOpacity、shadowOffset、shadowRadius 等属性。图层圆角(Corner Radius):设置图层的 cornerRadius 属性,并同时启用了 masksToBounds。图层蒙版(Mask):设置图层的 mask 属性或使用 maskToBounds。透明度(Opacity):设置视图的 alpha 属性。

2024-07-28 21:03:34 1178

原创 iOS 锁总结(cc)

在C++中,你可以使用来构建一个自定义的自旋锁。这种方法比使用更灵活,因为它允许你存储更复杂的状态或使用更高级的原子操作。C++复制代码12345private:67public:8910// 自旋等待111213141516171819202122// 临界区代码2324实现自旋锁的方法有多种,包括使用系统提供的锁(如)、基于的自定义实现、利用第三方库以及基于信号量的方法。选择哪种方法取决于你的具体需求和项目的约束条件。

2024-07-02 18:25:19 971 2

原创 Swift有什么时候是深拷贝,什么时候是浅拷贝?

在Swift中,你可以使用。

2024-07-01 14:20:28 1562

原创 Flutter:FlutterBoost

FlutterBoost是基于Flutter的Boost库,其实现原理主要包括以下几个方面:1. 引擎复用:FlutterBoost通过复用单个Flutter引擎实例,使得在原生和Flutter之间切换页面时,不需要每次都创建新的引擎实例。这大大提高了页面切换的流畅性和性能。2. 页面栈管理:FlutterBoost内部维护了一个页面栈,用于管理所有的Flutter页面和原生页面。当进行页面跳转时,它会根据页面栈的状态来决定是显示Flutter页面还是原生页面。

2024-06-23 16:51:14 1332

原创 KVO原理

需要注意的是,阻止 KVO 可能会违反类的设计意图,并可能导致使用该类的其他代码出现问题。因此,除非有充分的理由,否则通常不建议禁用 KVO。如果你的类是为其他开发者使用的 API 的一部分,最好在设计时就考虑到这一点,并在文档中明确指出哪些属性支持 KVO,哪些不支持。这样,这个属性就不会暴露在类的公共头文件中,外部对象也就不知道这个属性的存在,从而无法对其进行 KVO。此时,可以在类的文档中明确指出某些属性不支持 KVO,并且不保证对这些属性的 KVO 监听会有任何效果。这意味着在属性变化时手动调用。

2024-06-15 17:40:19 1060

原创 iOS Category

Category 的主要用途是为现有的类添加新方法,而不是改变类的内部状态或结构。如果允许在 Category 中添加实例变量,那么在运行时对类的内存布局进行修改可能会引起严重的兼容性问题,尤其是对于已经在使用的类实例。如果允许在 Category 中添加实例变量,那么在运行时对类的内存布局进行修改可能会引起严重的兼容性问题,尤其是对于已经在使用的类实例。:如果 Category 能够添加实例变量,当多个 Category 尝试添加同名的实例变量时,冲突和不一致的情况将难以避免。类型添加了一个新的方法。

2024-06-15 17:20:09 1196

原创 消息查找、消息转发机制

代码直观:方法在编译时就已经定义,代码清晰易懂,便于维护。编译时检查:编译器可以对所有方法进行类型检查和语法检查,减少运行时错误。性能:由于方法在编译时已经确定,不需要在运行时进行方法解析,调用速度更快。直接预定义方法适用于插件数量有限且变化不频繁的场景,代码简单直观,性能较好。动态方法解析则适用于需要高扩展性和灵活性的场景,可以在运行时动态添加或修改方法,但增加了代码的复杂性和运行时的性能开销。在实际应用中,可以根据具体需求选择合适的方法。如果插件数量较少且变化不大,直接预定义方法可能更合适。

2024-06-12 18:02:18 992

原创 算法:198 打家劫舍

定义dp[i]为在不触动警报装置的情况下,偷窃到第i个房屋时能够偷窃到的最高金额。

2024-06-12 15:56:51 304

原创 算法:2、两数相加

给你两个的链表,表示两个非负的整数。它们每位数字都是按照的方式存储的,并且每个节点只能存储数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

2024-06-12 13:44:57 366

原创 算法:21.升序链表合并

新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。

2024-06-12 13:06:44 289

原创 iOS Runtime理解和应用场景

第一个参数是需要添加方法的类,第二个参数是一个selector,也就是实例方法的名字,第三个参数是一个IMP类型的变量也就是函数实现,需要传入一个C函数,这个函数至少有两个参数,一个是id self一个是SEL _cmd,第四个参数是函数类型。3)完整的消息转发:当-(void)forwardInvocation:(NSInvocation*)anInvocation 方法方法nil的时候则进入消息转发的最后阶段,完整的消息转发。这里利用runtime修改isa指针,修改调用方法时寻找方法的类。

2024-06-11 18:13:51 2247

原创 算法:11. 盛最多水的容器

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。

2024-06-11 12:42:22 342

原创 oc中类都是在main执行前,加载到内存中的,正确吗?

需要注意的是,Objective-C中的类加载是动态的,这意味着在程序运行时可以动态地创建、修改和销毁类。总结起来,Objective-C中的类是在程序运行时加载到内存中的,而不是在main函数执行前。Objective-C运行时系统会自动加载所有的类,并创建类的元数据,以便在main函数中使用它们。在Objective-C中,类是在程序运行时(runtime)加载到内存中的,而不是在main函数执行前。在Dart和Flutter中,static方法是在类被加载时加载的,并且它们被加载到类的元数据中。

2024-06-10 10:16:23 422 1

原创 iOS不改变frame,能写出一个位移动画

在iOS开发中,如果不想通过直接修改视图的frame属性来实现位移动画,可以使用Core Animation的类或UIView动画块来实现。下面分别展示这两种方法。

2024-06-09 16:41:15 667 1

原创 iOS开发-锚点

在iOS开发的面试中,锚点(Anchor Point)是一个可能涉及的高级主题,尤其是在讨论视图布局、动画和图层(CALayer)相关的内容时。以下是一些关于锚点的面试题,涵盖了基础概念、实际应用以及可能的陷阱和注意事项。

2024-06-09 16:34:53 1248

原创 算法:283. 移动零

给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。nums =nums =[0][0]你能尽量减少完成的操作次数吗?

2024-06-07 19:23:14 692

原创 算法:94. 二叉树的中序遍历--扩展前中后层序遍历

给定一个二叉树的根节点root,返回它的遍历。

2024-06-07 18:51:41 320 1

原创 算法:226. 翻转二叉树

给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。

2024-06-07 18:27:19 349

原创 算法:70. 爬楼梯

假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶。

2024-06-07 18:16:28 310

原创 iOS开发中copy on write

不可变对象的复制:当对一个不可变对象执行复制操作时,实际上只会创建该对象的引用计数副本,而不会真正复制对象的内容。这样可以节省内存,并提高性能。通过使用Copy-On-Write机制,可以减少不必要的内存复制和内存消耗,提高性能和内存效率。方法复制为NSString时,实际上只会创建一个不可变的NSString对象,而不会复制真正的字符串内容,直到修改其中一个副本为止。方法复制为NSArray时,实际上只会创建一个不可变的NSArray对象,并共享内部的数据结构,直到修改其中一个副本为止。

2024-06-07 10:13:58 247

原创 NSNotificationCenter的底层原理

底层初窥——NSNotificationCenter | 江涛的博客iOS底层系列31 -- Notification的底层原理 - 简书iOS通知底层实现原理

2024-06-06 18:39:39 399

原创 RxSwift和Combine的区别

RxSwift 是一个用于 iOS 开发的响应式编程库,它提供了一种声明式的方法来处理异步数据流。双向数据绑定(Two-way Data Binding)是 RxSwift 中一个非常有用的特性,它允许视图和模型之间的数据相互同步。虽然 RxSwift 本身没有提供直接的双向数据绑定特性,但我们可以通过一些技巧和 RxSwift 提供的工具来实现这一功能。下面是双向数据绑定的实现原理和一个示例。

2024-06-06 17:10:30 818

原创 算法:101. 对称二叉树

给你一个二叉树的根节点root, 检查它是否轴对称。truefalse[1, 1000]你可以运用递归和迭代两种方法解决这个问题吗?

2024-06-05 13:02:08 266

入职一个月的感受,所需要的资源

入职一个月的感受,所需要的资源

2024-09-08

NSRunLoopDemo

runloop相关的代码整理。Timer,CustomSource,DispatchSource,ConfigRunLoop,ObserverRunloop等

2016-09-02

SourceDemo

dispatch_source_create,dispatch_source_set_timer

2016-08-25

Instance of Subclass, Subclass, Instance of Superclass, Superclass,

Instance of Subclass, Subclass, Instance of Superclass, Superclass,及方法直接的关系

2016-08-25

空空如也

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

TA关注的人

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