自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【iOS】——SDWebImage源码学习

SDWebImage是iOS中提供图片加载的第三方库,可以给UIKit框架中的控件比如UIImageView和UIButton提供从网络上下载和缓存的图片。它的接口十分简洁,如果给UIImageView控件添加图片可以使用如下代码//第一个参数是图片的URL第二个参数是占位图片加载失败时显示如果给UIButton添加图片可以使用如下代码//第一个参数是图片的URL,第二个参数是按钮状态,第三个参数是占位图片,加载失败时显示通过异步方式加载图片可以自动缓存到内存和磁盘中,并且可以自动清理过期的缓存。

2024-04-16 15:51:06 488

原创 【iOS】——Blocks

Blocks是C语言的扩充功能,并且可以用一句话来表示Blocks的扩充功能:Blocks是带有自动变量(局部变量)的匿名函数。匿名函数:Blocks是一种匿名函数,也就是没有特定名称的函数。它们可以在需要的地方定义和使用,而无需提前声明或命名。这使得Blocks非常灵活,可以作为参数传递给其他函数或方法,或者作为变量保存和执行。自动变量(局部变量):Blocks可以捕获其定义范围内的自动变量(也称为局部变量)。当一个Block被定义时,它会在其内部创建一个副本,用于在Block执行时访问该变量的值。

2024-03-18 19:46:43 1150 2

原创 【学习iOS高质量开发】——协议与分类

OC动态消息系统的工作方式决定了其不可能实现真正的私有方法或者私有实例变量。那么怎么实现私有变量和私有方法呢?这就要用到特殊的“class-continuation分类”了。“class-continuation分类”和普通的分类不同,他必须定义在其所接续的那个类的实现文件里,并且这个类没有名字。这样你就可以在其中定义你的私有方法和私有变量了,这样有什么好处呢?公共接口里本来就能定义实例变量。不过,把它们定义在“class-continuation分类”或“实现块”中可以将其隐藏起来,只供本类使用。

2024-02-19 12:30:00 1025

原创 【学习iOS高质量开发】——接口与API设计

所有对象均要初始化。初始化时,有些对象可能无须开发者向其提供额外信息,不过一般来说还是要提供的。以iOS的UI框架UIKit为例,其中有个类叫做UITableViewCell,初始化该类对象时,需要指明其样式及标识符,标识符能够区分不同类型的单元格。由于这种对象的创建成本较高,所以绘制表格时可依照标识符来复用,以提升程序效率。我们把这种可为对象提供必要信息以便其能完成工作的初始化方法叫做“全能初始化方法”。如果创建类实例的方法不止一种,那么这个类就会有多个初始化方法。

2024-02-19 05:33:57 1053

原创 【iOS】——使用ZXingObjC库实现条形码识别并请求信息

ZXing库是一个专门用来解析多种二维码和条形码(包括包括 QR Code、Aztec Code、UPC、EAN、Code 39、Code 128等)的开源性质的处理库,而ZingObjC库是它的一个移植版本。由于博主还没有真机进行调试,所以舍去了使用摄像头的一些方法,仅实现其最终识别结果的方法。

2024-02-07 10:51:54 1930

原创 【学习iOS高质量开发】——对象、消息、运行期

public@private@end@public@private@end那么新添加的实例变量就会代替原第一个位置实例变量的偏移量。这样的话,如果代码使用了编译器计算出来的偏移量,那么在修改类定义之后必须重新编译,否则就会出错。例如:某个代码库中的代码使用了一份旧的类定义。如果和其相链接的代码使用了新的类定义,那么运行时就会出现不兼容现象。OC把实例变量当作一种存储偏移量所用的“特殊变量”,交由“类对象”保管。

2024-01-21 17:32:58 1102 2

原创 【iOS】——基于Vision Kit框架实现图片文字识别

根据苹果的官方文档,Vision可以执行面部检测、文本检测、条形码识别、图像注册和一般功能跟踪。Vision还允许将自定义Core ML模型用于分类或对象检测等任务。下面只是对文本识别的一个学习。

2024-01-18 17:15:14 1587

原创 【学习iOS高质量开发】——熟悉Objective-C

注意。

2024-01-14 01:31:28 2126

原创 【iOS】——知乎日报第五周总结

要实现评论区的展开全文和收起,需要先实现评论区文本的自适应高度,接着我用数组来记录每个按钮的状态,如果为展开状态则为1,如果为收起状态则为0。通过数组中按钮的状态为按钮的selected属性做出选择并改变cell的高度。有的评论没有被回复评论或者被回复评论过短,这时就不需要展开全文的按钮,所以首先计算被回复评论的文本高度,根据文本高度来决定是否隐藏展开全文的按钮。

2023-11-19 21:17:01 495

原创 【iOS】——知乎日报第三周总结

在自定义cell中创建并初始化显示评论的Label控件,需要注意的就是如果默认tableview的重用机制的话就会导致你的cell上会重复显示评论的数目,因此需要改变它的重用机制,我是每次都从当前的index path中获取cell,这样就会避免cell的重用导致的重复显示问题。有的评论它是自己发出的,有的评论它是回复别人的评论的,还有就是有时候回复别人的评论时,别人的评论已经被删除的情况,因此就需要进行判断。

2023-11-05 19:16:00 637

原创 【iOS】——知乎日报第二周总结

当我下拉刷新的时候一开始我自定义的cell的内容顺序没有问题,当我一直下拉刷新或者上滑看以前的内容的时候就会出现乱序的情况,一开始以为是tableView的cell的复用问题,最后用了好久时间调试才发现我给cell赋值的数组有问题,我一开始数组的元素为每天的总的数据,后来改成了每天的分开的五个数据,最后解决了这个问题// NSLog(@"往日请求失败");

2023-10-29 20:02:27 597

原创 【iOS】——知乎日报第一周总结

这里我使用了第三方库MJRefresh库进行下拉刷新,当我下拉刷新时,程序会调用这个库的库方法,接着我在库方法中给我创建的下拉数组添加新的元素,这里我设置的是组元素也就是每下拉刷新一次,添加一个元素,接着在tableView控件的返回组数的协议函数里返回我创建的下拉数组的元素个数。当我使用Block传值过来的网络请求的数据赋值给我布局的UI元素时,运行时总是会导致程序崩掉,查了下原因是进行完赋值后程序还没回到主线程进行UI布局,所以我加了下面这个方法让程序回到主线程进行布局。

2023-10-23 15:07:40 925

原创 【iOS】——用单例类封装网络请求

JSONModel一个第三方库,这个库用来将网络请求到的JSON格式的数据转化成Foundation框架下的Model类的属性,这样我们就可以直接通过访问Model类的属性来访问网络请求到的数据。

2023-10-15 20:28:43 904

原创 【iOS】——仿写计算器

首先创建两个UITextField对象,一个用来显示输入到表达式,一个用来输出运算结果,接着创建一个数组用来存放button的名称,接着循环创建button对象即可。还需要在当前文件触发button的事件函数,因为要通过button的事件函数将当前button传值到CalculationViewController文件中。对于负数的运算,我是将与“(”相邻的“-”转换为“!”进行负数转变,其中需要将“!对于括号匹配问题,我使用栈来处理,当读到“(”则入栈,读到“)”则栈顶元素出栈,最后判断栈是否为空即可。

2023-10-07 22:42:34 694

原创 【Objective-C】——内存管理

对于用alloc/new/copy/mutableCopy方法生成并持有的对象,或者用retain方法持有的对象,由于持有者是自己,所以在不需要该对象时需要将其释放。这里就要引入对象的使用环境了。使用上述方法以外的方法来获取对象,即使用alloc/new/copy/mutableCopy以外的方法取得的对象,因为非自己生成并持有,所以自己不是该对象的持有者。通过retain方法,非自己持有生成的对象跟用alloc/new/copy/mutableCopy方法生成并持有的对象一样,成了自己所持有的。

2023-09-24 18:05:32 105

原创 【iOS】——KVC

前面提到使用KVC操作属性时,如果这些属性没有setter、getter方法,也不存在对应的成员变量时,KVC将会自动会调用setValue: forUndefinedKey:或valueForUndefinedKey:方法。当调用KVC来设置对象的属性时,如果属性的类型为基本类型并且程序传入了对应类型的值,那么程序可以正常进行,如果属性的类型为字符串类型传入nil值也能正常进行,但是基本类型传入nil值则会自动执行setNilValueForKey:方法,因此为了满足我们的需求可以重写该方法。

2023-09-24 18:05:04 180

原创 【iOS】—— present和push再学习

Push 是在导航控制器(UINavigationController)中使用的界面切换方式,它可以将一个新的视图控制器压入导航栈中并作为栈顶元素显示在屏幕上,当使用push的时候系统会自动在右上角生成返回上一级的按钮,此按钮也可以用重写的pop按钮覆盖。Present 是在模态视图(Modal)中使用的界面切换方式,它可以让用户在一个新的视图控制器中完成某些操作,然后再返回到原来的视图控制器。可以看到此时的视图并不是全屏的,这个就是模态视图,个人理解就是相当于一个临时的覆盖在原来视图上的一个新的视图。

2023-09-17 17:35:47 544

原创 【iOS】——UIViewController生命周期

loadView这个方法是系统默认创建的 因为重写了这个方法导致必须要继承其父类的方法,如果不写继承的loadView,无法继承父系的loadview的创建方法,那么就永远无法创建,那么就会陷入循环。可以在此方法中执行一些需要在视图完全消失后才能进行的操作,如停止定时器或释放资源等。可以在此方法中执行一些需要在视图完全显示后才能进行的操作,如启动定时器、请求网络数据等。loadView:加载视图。在此方法中,可以手动创建或从 NIB 文件加载视图,并将其分配给视图控制器的 view 属性。

2023-09-15 21:44:38 475

原创 【iOS】—— 单例模式

当其他线程再调用 mySingleton 方法时,onceToken为其他值,线程阻塞。如果一个类无论多少次都只能创建一个对象并提供一个类方法供全局调用,在编译时初始化这个类,然后一直保存在内存中,到程序退出时由系统自动释放这部分内存,那么这个类就被称为单例类。当线程调用mySingleton方法时,此时 onceToken = 0,调用 block 中的代码,此时 onceToken =其他值。运行程序时先不进行单例类的创建,当需要用到的时候再进行创建,这种方式也是单例模式下比较常用的方式。

2023-09-15 20:42:07 595

原创 【iOS】——多界面传值方式的比较

在iOS中有五大多界面传值方式,分别为属性传值、协议传值、通知传值、KVO传值和Block传值。下面就简单介绍并比较一下这几种传值方式。

2023-09-10 17:40:53 91

原创 【iOS】——MVC模式

在Controller中,需要将View和Model实现交互,因此在这里定义view的类和Model的类并进行实例化,并且在这里添加view的UI元素的事件函数。视图对象的主要目的是显示来自应用程序模型对象的数据,并启用对该数据的编辑。当模型对象更改时(例如,通过网络连接接收到新数据),它会通知控制器对象,控制器对象会更新相应的视图对象。通信:查看对象通过应用程序的控制器对象了解模型数据的更改,并将用户发起的更改(例如,通过控制器对象在文本字段中输入的文本)传递给应用程序的模型对象。

2023-09-10 14:27:58 164

原创 【iOS】——属性关键字和深浅拷贝

如果所引用的对象被释放,该属性仍然保持对已释放的内存地址的引用,这可能导致悬垂指针的问题。因此浅拷贝增加对象的引用次数而不会分配新的内存空间,深拷贝不会增加对象的引用次数而会分配新的内存空间。copy 用于声明对对象的拷贝引用,会创建属性值的副本。:使得对象的引用计数加一,release使得对象的引用计数减一,当对象的引用计数为0时会被系统回收内存。:用于表示对对象的弱引用,不会增加对象的引用计数。weak 修饰的指针变量,在指向的内存地址销毁后,会在 Runtime 的机制下,自动置为 nil。

2023-09-01 20:49:45 73

原创 【iOS】——UITableView的折叠Cell

折叠Cell顾名思义就是能够折叠的Cell。在日常生活中它的使用途径非常广泛,例如当我们观看视频时选择分辨率或者搜索时选择标签所用到的就是折叠Cell。

2023-08-30 20:35:08 253

原创 【iOS】—— Masonry学习

在学习Masonry之前需要先安装好Cocoapods,接着通过cocoapods来调用第三方库Masonry,关于cocoapods的安装可以参考这篇博客最新cocoapods安装流程。Masonry 是一个强大而简洁的自动布局库,它提供了一种更加优雅和易用的方式来处理视图之间的布局约束。无论是处理简单的界面布局还是复杂的自定义视图布局,Masonry 都能够帮助您更高效地创建和管理布局约束,加快开发速度并减少出错的可能性。

2023-08-30 19:54:15 171

原创 【iOS】——天气预报总结

本周学习了iOS中的简单网络请求并且仿写了一个天气预报的demo,对于这个demo前期需要考虑的东西有很多,搭建框架花费了不少时间,下面做个总结吧。对于仿写天气预报用到最多的两个知识点就是简单网络请求和多界面传值。

2023-08-03 15:50:41 146

原创 【iOS】——学生管理系统总结

本周仿写了学生管理系统,这个demo比较简单,下面就做个总结吧。对于这个demo,最重要的就是属性传值和协议传值。

2023-07-30 20:30:29 64

原创 【iOS】—— 3GShare总结

本周仿写了3GShare,在这个demo中学到了许多新知识也运用了许多先前学过的知识,下面就做个总结吧以上就是本篇文章的全部内容,需要用到最重要的就是多界面传值。

2023-07-30 19:56:02 81

原创 【iOS】—— 网易云音乐总结

对于仿写网易云音乐的一些总结

2023-07-22 09:51:43 149 2

原创 【iOS】——界面切换(push&&pop,present&&dismiss)

总结一下就是push和pop绑在一起,需要通过导航控制器来使用。present和dismiss捆在一起,需要在视图中设置按钮触发事件函数来调用。pop返回的是使用push的那个视图控制器,dismiss返回的是使用present的那个视图控制器。

2023-06-09 22:54:34 783

原创 【iOS】——自定义UITableViewCell

它的主要思路是在 tableView:cellForRowAtIndexPath: 方法中手动创建自定义 UITableViewCell 的实例。它的主要思路是在 viewDidLoad 方法中注册自定义 UITableViewCell 的类,以便在需要时从可重用池中获取它。这种方式的实现比较复杂,但由于每次可以从可重用池中获取实例,因此在数据量较大时性能更好。这是因为这是因为在注册方式下,每个 UITableViewCell 的实例都已经被注册到了可重用池中,并与对应的重用标识符关联起来而不注册则不是。

2023-06-09 16:41:44 694

原创 【iOS】——懒加载

前面提到它可以延迟对象的创建或初始化,直到这个对象被真正使用时再去创建或初始化,那么该如何实现呢,显然我们可以重写属性的getter方法,在里面添加自己的逻辑,也就是当我们需要创建该实例对象时先判断一下该对象是否已经创建过了,如果创建过直接返回该对象,如果没有再创建。懒加载(Lazy Loading)也称为延迟加载,是一种常见的优化技术,它可以延迟对象的创建或初始化,直到这个对象被真正使用时再去创建或初始化,简单的说就是当我们运行时需要一些资源的时候再加载这些资源。首先是定义控件的成员变量和属性。

2023-06-07 21:20:53 382

原创 UI学习——UITableView

以上就是本篇文章的全部内容。

2023-06-06 19:39:55 1790

原创 UI学习——多界面传值

以上就是本篇文章的全部内容。

2023-06-04 21:49:07 83

原创 UI学习——分栏控制器

以上就是本篇文章的全部内容。

2023-06-03 22:00:25 127

原创 UI学习——导航控制器

本篇文章将介绍导航控制器的基础和切换以及导航栏和工具栏

2023-06-02 23:22:57 453

原创 UI学习——UIScrollView(滚动视图)

以上就是本篇文章的全部内容。

2023-05-31 21:49:19 1920

原创 UI学习——登陆界面实例

利用UILable、UIButton、UIView、UITextField、警告对话框编写一个简单的登陆界面。

2023-05-31 19:08:39 394

原创 UI学习——UITextField控件

本文将介绍UITextField控件和UITextFieldDelegate协议

2023-05-29 21:08:26 1451

原创 UI学习——警告对话框与等待提示器

本文将详细介绍iOS的UI中的警告对话框与等待提示器

2023-05-28 20:56:20 327

原创 UI学习——步进器与分栏控件

本文将介绍IOS的UI控件里的步进器与分栏控件

2023-05-28 20:19:36 325

空空如也

空空如也

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

TA关注的人

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