自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 iOS——KVO底层学习

* 添加观察者方法 */// 确认观察者实现了 observeValueForKeyPath:ofObject:change:context: 方法return;// 如果没有实现该方法,直接返回// 加锁// 获取路径信息if (pathInfo == nil) // 如果路径信息为空// 创建新的路径信息// 复制路径字符串,使用不可变对象作为键// 插入路径信息到路径映射表// 释放路径信息// 释放路径字符串// 获取观察者数量。

2024-06-11 22:34:01 846

原创 iOS——分类、扩展和关联对象

回顾一下什么是分类、什么是扩展:分类(Category)和类扩展(Extension)是两种常见的代码组织方式,用于扩展类的功能。

2024-06-10 21:26:41 1015 1

原创 iOS——类与对象底层探索

当我们使用OC创建一个testClass类并在main函数创建它的实例对象的时候,OC的底层到底是什么样的呢?首先,我们要了解OC对象的底层结构,那么我们就得知道:OC本质底层实现转化其实都是C/C++代码。struct NSObject_IMPL的具体实现:该结构体中只有一个Class isa;发现Class实际上就是一个指针,指向了objc_class类型的结构体。关于objc_class,我们在下面的类结构中讲。

2024-06-02 18:28:04 1065

原创 iOS——Tagged Pointer

标记指针(Tagged Pointer)是一种优化技术,用于在不分配额外内存的情况下存储小的对象或数字值。在这种技术中,指针的最低有效位(LSB)用于存储特殊标记,而不是指向分配的内存地址。传统上,Objective-C 对象都是通过指针引用的,指针指向一个存储在堆内存中的对象实例。然而,对于一些小的对象,如NSNumber、NSDate等,它们只包含了一些简单的数据,没有必要为它们分配额外的内存空间。因此,为了节省内存和提高性能,Objective-C 引入了标记指针。

2024-05-15 15:50:21 985

原创 iOS——工厂模式

所谓设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的 高内聚 和 低耦合。可以这么说,计算机中设计模式指的是一套广为人知、被反复使用、经过分类编目的代码设计经验。使用设计模式是为了可重用代码,让代码更容易被他人理解,最重要的是保证代码可靠性。

2024-05-14 23:16:58 874

原创 iOS——runtime

iOS——消息传递和消息转发。

2024-05-14 19:09:26 746

原创 iOS——消息传递和消息转发

从本类的 method list (二分查找/遍历查找)查找imp从本类的父类的cache查找imp(汇编)从本类的父类的method list (二分查找/遍历查找)查找imp:…继承链遍历…(父类->…->根父类)里找cache和method list的imp若上面环节有任何一个环节查找到了imp,跳出循环,缓存方法到本类的cache,并返回imp直到查找到nil,指定imp为消息转发,跳出循环,执行动态方法解析resolveMethod_locked。

2024-05-14 18:21:50 923

原创 iOS——SDWebImage源码学习

什么是SDWebImageSDWebImage是一个流行的iOS和macOS平台上的开源库,用于异步加载和缓存网络图片。它提供了一套简单易用的API,使得在应用中加载网络图片变得更加方便和高效。主要特点和功能:异步加载:SDWebImage通过异步方式加载网络图片,避免了阻塞主线程的问题,提高了应用的流畅性和响应性。缓存管理:SDWebImage实现了内存缓存和磁盘缓存,可以有效地管理已加载过的图片,避免重复加载和节省网络带宽。图片处理:支持对图片进行解码、压缩和裁剪等处理,以满足不同需求下的图

2024-05-06 21:13:15 817

原创 iOS——NSCache

NSCache是Foundation框架中的一个类,用于在iOS和macOS应用程序中进行临时性的内存缓存。它提供了一种轻量级的缓存机制,可以用于存储临时性的数据,例如图片、对象等。:NSCache用于存储需要临时性缓存的数据,这些数据在应用的生命周期内需要频繁访问,但并不需要永久保存。:NSCache会自动管理缓存中的对象,当系统内存不足时,NSCache会自动释放部分缓存对象以腾出内存空间。:NSCache使用键值对的方式来存储和访问缓存数据。通过键(Key)可以快速查找对应的值(Value)。

2024-04-26 21:38:40 1210 4

原创 iOS——【GCD】

GCD指的是Grand Central Dispatch,它是苹果公司开发的一套多线程编程技术。GCD提供了一种简单而有效的方式来管理应用程序中的并发任务。它通过将任务提交到适当的队列(串行队列或并发队列)来管理并发执行的任务,从而帮助开发者更轻松地实现并发编程,提高应用程序的性能和响应速度。上面的就是在后合线程中执行长时间处理,处理结束时,主线程使用该处理结果的源代码。这样,dispatch_async (queue, ^{ 这仅有 一行的代码表示让处理在后台线程中执行。

2024-03-26 18:43:22 913

原创 iOS——【Blocks】

Blocks是C语言的扩充功能,即带有自动变量的匿名函数。匿名函数就是不带函数名的函数。这一概念同样被称为“闭包”,lambda计算等。自动变量是在函数内部声明的变量,其作用域仅限于声明它的函数内部。这意味着它们只能在其声明的函数内部使用,并且在函数执行完毕后会被自动销毁。

2024-03-17 23:11:19 1139 1

原创 iOS——【自动引用计数】ARC规则及实现

objc_autoreleaseReturnValue 函数会检查使用该函数的方法或函数调用方的执行命令列表,如果方法或函数的调用方在调用了方法或函数后紧接着调用objc_retainAutoreleasedReturnValue( ) 函数,那么就不将返回的对象注册到autoreleasepool 中,而是直接传递到方法或函数的调用方。顾名思义,它是用于自己持有(retain)对象的函数,但它持有的对象应为返回注册在autoreleasepool 中对象的方法,或是函数的返回值。

2024-03-08 19:04:40 1290

原创 Effective Objective-C 学习(四)

CoreFoundation 框架也定义了一套C 语言API,用于操作表示这些collection 及其他各种collection 的数据结构。例如,NSArray 是Foundation 框架中表示数组的 Objective-C 类,而CFArray 则是 CoreFoundation 框架中的等价物。这两种创建数组的方式也许有区别,然而有项强大的功能可在这两个类型之间平滑转换,它就是 “无缝桥接”(toll-free bridging)。

2024-02-18 16:26:47 2014 1

原创 Effective Objective-C 学习(三)

performSelector 是 Objective-C 中的一个方法,用于在对象上调用指定的方法,并且可以延迟执行或在指定的线程上执行。它会在当前线程中调用指定的方法 aSelector,如果方法有返回值,则返回该返回值;如果方法没有返回值,则返回 nil。它相当于直接调用选择子:[object selectorName];这种编程方式极为灵活,经常可用来简化复杂的代码。

2024-02-17 20:58:19 7058

原创 Effective Objective-C 学习(二)

有时需要在对象中存放相关信息。这时我们通常从对象所属的类中继承一个子类,然后改用这个子类对象。然而并非所有情况下都能这么做,有时候类的实例可能是由某种机制所创建的,而开发者无法令这种机制创建出自己所写的子类实例。Objective-C 中有一项强大的特性可以解决此问题,这就是“关联对象”。

2024-01-21 18:18:55 2776

原创 Effective Objective-C学习(一)

OC将堆内存管理抽象出来了。不需要使用malloc或者free来分配或释放对象所占的内存。OC运行期环境把这部分工作抽象成一套内存管理架构,名为“引用计数”。OC为C语言添加了面向对象特性,是其超集。OC使用动态绑定的消息结构,也就是说在运行的时候才会检查对象类型。接收一条消息后,究竟应执行哪种代码,由运行期环境而非编译器来决定。

2024-01-14 20:36:16 1536

原创 iOS——UIPickerView选择器

UIPickerView是 iOS 开发中常用的用户界面组件之一,用于在垂直方向上显示一个滚动的列表,用户可以通过滚动选择其中的一项。

2023-12-09 18:04:53 1043

原创 iOS——调用系统相册和相机

表示媒体的类型,是图片还是视频。

2023-12-09 17:13:22 847

原创 iOS——定位与地图

平时在写项目的时候可能会遇到需要使用定位服务的地方,比如说获取位置和导航等。因此这里我会使用OC自带的库以及苹果系统的地图来获取定位以及显示在地图上。

2023-12-09 16:42:56 1266 1

原创 iOS——POST请求

这里我使用的url是一个模拟后端的网站提供的URL,网站名:RequestBin,谷歌搜就行。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

2023-11-26 20:35:43 701

原创 仿写知乎日报第四周

本周主要修改了以往的一些bug,实现了一些遗漏的新功能。

2023-11-12 21:50:12 184

原创 仿写知乎日报第三周

本周新学习了FMDB数据库,并对Masonry的使用有了更近一步的了解,还了解了cell的自适应高度。

2023-11-05 19:56:25 179

原创 iOS——FMDB的介绍与使用

NSSearchPathForDirectoriesInDomains方法返回的是一个数组类型的数据,所以这里是获取它返回数组的最后一个元素。目标目录的类型(Search Path Directory Type):这是一个枚举值,用于指定你希望获取的目录的类型。意思就是你在刚才的collectionData数据库里边添加了一个text类型的名叫mainLabel的一个索引,其它代码意思也相似。目标目录的域(Search Path Domain Mask):这是一个枚举值,用于指定搜索目录的域。

2023-11-05 18:59:51 1108

原创 仿写知乎日报第二周

协议定义了一系列方法,允许你监控和响应WKWebView的导航事件。以下是一些常用的这些方法允许我们监控页面导航、处理导航错误、执行页面加载后的操作以及其他与WKWebView相关的事件。在这里,我使用的是- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation;即完成网页的获取后调用。

2023-10-29 22:00:01 324

原创 仿写知乎日报第一周

在写知乎日报的时候,遇见了线程的问题,比如说在viewController中获取Manager网络请求的内容时,因为在viewControllert中viewDidLoad执行的很早,所以如果将View层的初始化放在viewDidLoad的话,就会先去布局好UI,等网络请求好时无法将请求到的数据赋给UI控件。这时候就会发现,如果我们只是将其不加修饰写在网络请求完回调的方法时,就会报错,因为View的初始化不在主线程进行。然后获取我们通过网络请求到的图片的url,并且导入SDWebImage的头文件。

2023-10-23 18:13:03 469

原创 iOS——Manager封装网络请求

这时候,我们就可以直接使用封装好的网络请求了。在viewController中,我们先声明一个test方法,在test方法中我们创建Manager对象并打印该对象的数据。以上就是Manager的封装。

2023-10-17 16:03:05 651

原创 iOS——JSONModel的使用与JSONModel的嵌套

JSONModel是一个解析JSON数据的开源库,可以将JSON数据直接解析成自定义的model使用 JSONModel 非常简单,只需要将你的 model 类继承自 JSONModel ,而同时 model 中的属性名又恰巧可以和 JSON 数据中的 key 名字一样的话,那么非常恭喜你,你的工作已经完成90%。JSONModel 不只使用非常方便而且还会帮你检查 JSON 数据的完整性,如果 JSON 数据不完整的话是要返回 nil 的。

2023-10-16 22:58:11 723

原创 iOS——仿写计算器

实现四则运算的算法思路是:首先输入的是中缀表达式的字符串,然后将其转为计算机可以理解的后缀表达式,然后将后缀表达式求值:中缀转后缀表达式思路参考:《数据结构》:中缀表达式转后缀表达式 + 后缀表达式的计算在该思路的基础上,会遇见以下几个问题:计算器的布局及限制本次计算机的仿写我使用的是mvc模式,并且布局使用了Masonry框架。在view层:我使用了一个for循环循环创建button,并为每个button的tag赋值,并使用Masonry框架等对其布局。布局这块直接看代码就行了不多赘述。在v

2023-10-07 16:22:07 436

原创 iOS——引用计数(一)

自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术。

2023-09-22 21:41:33 282

原创 iOS——KVC(键值编码)

KVC(Key Value Coding)是一种允许以字符串形式间接操作对象属性的方式。结果:在使用KVC时,都是通过字符串来指定被操作的属性。即使用forKey传入属性名的字符串。

2023-09-22 21:32:57 239

原创 iOS——UIColor与CGColor与CALayer

UIColor和CGColor都是iOS中用于表示颜色的数据类型。虽然UIColor和CGColor都可以表示颜色,但它们的使用场景和方式略有不同。通常情况下,如果需要在应用程序中表示颜色,建议使用UIColor,因为它提供了更友好的API和更多的功能。如果需要在底层图形库中表示颜色,建议使用CGColor。UIView之所以可以显示在屏幕上,是因为它内部的一个图层。在创建UIView的时候,它内部会自动创建一个图层(即CALayer对象),通过UIView 的layer属性可以访问这个层。

2023-09-16 21:17:58 297

原创 iOS——ViewController的生命周期

ViewController的生命周期是指在应用程序运行过程中,ViewController实例从创建到销毁的整个过程。在这个过程中,ViewController会经历一系列的生命周期方法,这些方法可以帮助开发者管理ViewController及其相关的视图和逻辑。ViewController的生命周期是一个复杂的过程,开发者需要了解这个过程,才能正确地管理ViewController及其相关的视图和逻辑。

2023-09-16 19:56:36 1044

原创 iOS——present相关属性以及dismiss多级的方法

在该代码中,ThreeViewController是当前视图控制器(绿色),FourViewController是当前视图控制器的上一级视图控制器,OneViewController是我们要跳转的目标视图控制器(橙色)。按照之前所学的,如果我们直接用dismiss方法,视图会从当前层级跳转到上一层级,那么如果我现在想让它从当前视图控制器直接dismiss到根视图控制器,应该怎么做呢?这两个概念在使用Modal视图控制器时非常有用,因为它们允许您跟踪当前视图控制器的状态以及它所呈现的视图控制器。

2023-09-16 14:40:04 616

原创 iOS——单例模式

使用以上的方法,可以使我们通过调用该方法来初始化实例对象,但是如果我们使用 [[xxx alloc] init] 方法来初始化该对象,就会发现返回的还是不同的对象,这是因为使用 [[xxx alloc] init] 方法实际上alloc的过程是调用了allocWithZone方法,所以用不了我们自己定义的初始化方法,因此想要真正完成单例模式,我们还应该重写allocWithZone方法,使alloc的时候返回唯一实例;因此,在饿汉模式中,如果使用init方法来创建实例,就会导致无法创建实例的情况发生。

2023-09-15 19:56:24 418

原创 iOS——MVC模式

【代码】iOS——MVC模式。

2023-09-10 17:52:59 55

原创 iOS——折叠cell

在暑假的项目里我已经写过了折叠cell,但是那个cell的内容的变更只是使用label,因此这次我又一次学习了折叠cell,使用了可变数组来改变cell的单元格的内容,这样,通过点击单元格就可以实现cell的打开与关闭。首先,我创建了两个属性,一个单元格一个可变数组,然后单元格的内容是按照数组的元素顺序排列的,当点击单元格的时候,实际上是改变了数组的元素顺序,来以此改变单元格的内容。

2023-09-03 21:15:28 71

转载 iOS——CocoaPods的安装和使用以及Masonry框架

Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了,并具有高可读性,而且同时支持 iOS 和 Max OS X。相较与NSLayoutConstraints,masonry更加方便快捷,大量减少适配时间。使用Masonry的注意事项使用Masonry添加约束需要在addSubview方法之后,否则程序会崩。使用时经常会加mas_前缀,如果不想加前缀则在引用Masonry文件前加//定义这个常量,就可以不用在开发过程中使用mas_前缀。

2023-09-03 20:16:17 579

原创 OC属性关键字

决定编译器生成的getter和setter是否为原子操作(即是否线程安全),也可以理解为属性是否适合在多线程的场景下使用。在声明属性的时候,默认选择的是该属性。该属性是一个原子属性,使用了这个属性后,系统生成的 getter/setter 会保证 get、set 操作的完整性,不受其他线程影响。

2023-08-31 21:02:42 97

原创 IOS——多界面传值

如果现在要从B向A传值,我们首先应该在B的接口部分声明一个Block属性,然后在由B跳转回A的位置将需要传递的值放入该属性的参数部分,最后在A跳转到B的位置调用B页面的Block属性,并在Block块中完成相应的操作。然后在从B视图跳转到A视图的地方设定好代理 delegate的对象执行协议方法,最后在接收值的A界面遵循协议并且在A跳转到B的地方将B的代理者属性设定为A视图控制器,最后实现相应的协议方法即可。发送通知,然后在A界面注册通知,也就是接收通知,最后在A界面实现通知中的方法即可。

2023-08-04 16:23:10 174

原创 暑期第三周——天气预报

写这个项目用到了网络请求,通知传值,字典等知识。首先,我们要使用网络请求来完成模糊搜索城市,然后通过点击城市,可以跳转到对应的详情界面,详情界面中有搜索地区当前的天气、温度、湿度、体感温度、大气压强、能见度、运动指数等信息,还有一个scrollView和tableView分别显示着未来24小时的天气和温度以及未来七天的天气和温度。详情界面的导航控制器右侧有一个添加按钮,点击添加按钮就可以将当前地区添加到首页。

2023-08-04 14:50:45 76

空空如也

空空如也

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

TA关注的人

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