- 博客(47)
- 收藏
- 关注
原创 【Mac】git使用再学习
由于笔者最近在准备合作完成第二个项目,在写项目的过程中,要用到git来更好地合作,而笔者之前学习有关git的知识比较浅显而且长时间不使用,已经忘得差不多了,现在重新学习一下git,这次学习git主要有三个方面:学会如何使用github建立自己的代码库学会一些常见的git命令,用来远程合作。学习git的工作流(声明:本篇文章所有的工作都通过github和macOS操作系统进行,所有内容都以github为例)GitFlow。
2025-03-02 20:48:41
827
原创 OC高级编程之GCD
GCD是异步执行任务的技术之一。它可以将程序中记述的线程管理用的代码在系统级中实现。GCD的线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,比以前的线程更有效率。//长时间处理//例如AR用画像识别//例如数据库访问//长时间处理结束,主线程使用该处理结果。//只在主线程可以执行的处理//例如用户界面更新})});可以发现,GCD使用了Blocks,进一步简化了应用程序代码。
2025-02-24 17:54:58
935
原创 OC高级编程之Blocks
带有自动变量的匿名函数匿名函数就是指不带名称的函数。Blocks提供了类似C++和OC类生成实例或对象来保持变量值的方法。如果带有“自动变量值”,Blocks会保持自动变量的值Blocks的概念,在其他语言中其实也存在,只是名称不同。
2025-02-24 17:47:20
1020
原创 《Effective Objective-C》阅读笔记(下)
使用无缝桥接技术,可以在Foudation框架中的OC对象与CoreFoudation框架中的C语言数据结构之间来回转换。使用无缝桥接,可以将collection转换为具备特殊内存管理语义的collection。比如字典的键为“拷贝”,而值为“保留”,这时就只能使用无缝桥接来改变语义。
2025-02-24 17:28:52
2278
原创 《Effective Objective-C》阅读笔记(中)
比如:我们用某个类来表示个人信息,该类中还存放了一些引用指向此人的朋友,开发者可以添加或删除朋友,那这个属性就要用可变的set来实现。这种情况下,通常应该提供一个readonly属性供外界使用,返回一个不可变的set,这个set是内部可变set的一份拷贝。
2025-02-24 17:16:31
1137
原创 《Effective Objective-C》阅读笔记(上)
关联对象相当于把对象变成字典,不同的键对应不同的值。设置关联对象值时,通常使用静态全局变量做键。存储关联对象时,可以指明存储策略,来维护内存管理语义。
2025-02-24 17:06:58
1128
原创 【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(四)
变量作用域结束时,虽然随着持有强引用的变量obj失效,对象随之释放,但由于__bridge_retained转换使变量p看上去处于持有该对象的状态,因此该对象不会被废弃。这是因为由malloc函数分配的内存区域没有被初始化为0,因此nil会被赋值给附有__strong修饰符的并被赋值了随机地址的变量中,从而释放一个不存在的对象。bridge_transfer转换提供与此相反的动作,被转换的变量所持有的对象在该变量被赋值给转换目标变量后随之释放。retained转换可使要转换赋值的变量也持有所赋值的对象。
2024-12-15 21:00:19
866
原创 【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(三)
因此,使用附有__autoreleasing修饰符的变量作为对象取得参数,与除alloc/new/copy/mutableCopy外其他方法的返回值取得对象完全一样,都会注册到autoreleasepool,并取得非自己生成并持有的对象。像该源代码的声明一样,对象不注册到autoreleasepool也能传递,但是为了在使用参数取得对象时,贯彻内存管理的思考方式,我们要将参数声明为附有__autoreleasing修饰符的对象指针类型。weak修饰符的变量obj,变量obj持有对持有对象的弱引用。
2024-12-08 19:31:00
1067
原创 【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(二)
包含NSObject类的Foundation框架的源代码没有公开,不过Foundation框架使用的Core Foundation框架的源代码以及通过调用NSObject类进行内存管理部分的源代码是公开的。为此,我们使用开源软件GNUstep来说明,对内存分配的区域本身进行多重化管理,根据使用对象的目的、对象的大小分配内存,从而提高内存管理的效率。尽管如此,在大量产生autorelease的对象时,只要不废弃NSAutoreleasePool对象,那么生成的对象就不能被释放,因此有时会产生内存不足的现象。
2024-12-01 19:33:33
889
原创 【iOS】SDWebImage的使用
在写知乎日报时,通过接口申请到的网络数据中,有一部分用来表示图片的数据,使用URL表示的,要再次通过URL获取到图片,才能直接使用图片(UIImage),通过SDWebImage第三方库可以很好地解决这个问题,接下来就介绍一下SDWebImage的使用方法。
2024-10-27 16:40:25
714
原创 【iOS】使用AFNetworking更方便实现网络请求
在研究spotify时,发现AFNetworking在处理一些需要涉及到请求头和请求体的网络请求会非常方便,与headers和parameters参数有关,这些知识之后会再进行完善。
2024-10-20 17:13:14
1104
原创 【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数
自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术。用苹果官方说明的话说:在OC中采用ARC机制,让编译器来进行内存管理,在新一代Apple LLVM编译器中设置ARC为有效状态,就无需再键入retain或者release代码。也就是说,只要满足以下条件,就无需手动输入retain和release代码了:使用Xcode4.2或以上版本使用LLVM编译器3.0或以上版本编译器选项中设置ARC为有效。
2024-09-22 17:58:39
1345
原创 【iOS】KVC
定义:KVC(Key-value coding)键值编码,是指iOS开发中,允许开发者通过key名直接访问对象的属性,或者给对象的属性赋值,而不需要调用明确的存取方法。使用KVC键值编码的好处就是可以在运行时动态地访问和修改对象的属性,而不是在编译时确定。注意:在实现了访问器方法的类中,使用点语法和KVC访问对象差别不大,二者可以混用。但是在没有访问器方法的类中,无法使用点语法,这时KVC就有优势了。//直接通过Key来取值//通过Key来取值//通过KeyPath来取值。
2024-09-22 17:50:38
1625
原创 【iOS】单例模式
单例模式,简单地说就是一个类只对应一个对象,每次使用这个类时,都只能获取到那一个对象。它的详细定义如下:如果一个类始终只能创建一个实例,则这个类被称为单例类。有一个全局的接口来访问这个实例。当第一次载入的时候,它通常使用延时加载的方法创建单一实例。
2024-09-15 18:57:30
1675
2
原创 【iOS】present和push
present和push都用于iOS的视图切换,并且切换都是可逆的,原始视图不会被销毁,还可以直接更改window的rootViewController来切换视图,但是这种方法不可逆,并且原始视图会被销毁present一般用于不同业务界面的切换,push一般用于同一业务不同界面的切换present和dismiss对应,push和pop对应present只能逐级返回,push有栈控制,但是可以返回任意级?
2024-09-15 18:43:54
1550
原创 【iOS】ViewController的生命周期
InitloadView()当需要展示view而view为nil时,ViewController会调用loadView方法。viewDidLoad()类成员对象和变量的初始化都在这个方法里,在创建类后无论视图展现还是消失,这个方法只会在布局时调用一次viewWillAppear():视图将要展现的时候调用viewDidAppear():视图已经出现时调用viewWillLayoutSubviews()用于处理视图布局的变化,通常在这里执行与布局相关的操作,在子视图重新布局之前调用。
2024-09-15 18:40:21
1291
原创 【iOS】MVC设计模式
总的来说,MVC模式就是将一个程序分为了三个部分,model负责处理数据,view负责处理视图,controller负责处理逻辑。但是model、view和controller之间并不是一一对应的关系。⚠️Model 和 View 是相互独立的。
2024-09-08 19:12:29
793
原创 【iOS】通过第三方库Masonry实现自动布局
在暑期完成项目时,经常要花很多时间在调试各种控件的位置上,因为每一个控件的位置都需要手动去计算,在遇到循环布局的控件时,还需要设计算法来实现更简便地布局各个控件。这是由于手动布局的语言更偏向于直接给出控件的坐标位置,就需要准确计算控件的坐标值,但是在生活中,我们其实更倾向于使用相对位置来描述一个物品的位置。其实在OC语言中,也给出了类似的语法来帮助我们更简便地实现控件布局,这就是OC语言中的自动布局。
2024-09-01 16:14:50
854
原创 暑期学习总结
网易云音乐最主要用到的就是不同控件的堆叠,尤其是数据视图的堆叠,在数据视图上添加带有滚动视图的自定义cell,添加带有数据视图的自定义cell,通过多种视图控件的堆叠来实现复杂的界面效果。在笔者看来,网易云音乐的界面也是暑期项目中最复杂的一个。此外,在实现网易云音乐时,由于要实现全界面的夜间模式,笔者学习到了一些关于视图控制器生命周期的知识,在视图被呈现在屏幕上时,会有一些函数被依次调用,那么通过这些函数,就可以实现当前视图控制器视图的更新,配合全局变量就可以实现全界面的夜间模式。
2024-09-01 16:14:30
776
原创 【iOS】属性关键字
自定义类无论是copy还是mutablecopy都为深拷贝,因为自定义类没有copyWithZone:和mutableCopyWithZone:两个方法,需要遵守NSCopying和NSMutableCopying协议自己实现这两个拷贝方法。
2024-09-01 16:13:39
1764
原创 天气预报仿写总结
这周学习了iOS中简单的网络请求,并完成了天气预报的仿写,这篇博客来做一下总结。天气预报主要要实现四个界面,接下来分四个界面分别讲解一下。
2024-08-03 14:47:25
843
原创 学生信息管理系统总结——(oc语言版)
这个项目虽然很简单,但是还是让我学到了一些很有用的知识的,有关NSPredicate和正则表达式的知识,之后会再继续深入学习。
2024-07-27 16:40:40
597
原创 3Gshare仿写总结
到这里就基本把3Gshare的所有界面都讲解完了,通过这个项目还是学到了很多新东西的,写网易云音乐时最大的收获是多个控件相互嵌套和夜间模式需要的多界面传值。3Gshare这个项目最大的收获就是聊天室所需要的实时更新数据视图,保留弹出的子视图和按钮状态的保持与更新。希望接下来可以继续进步,学习更加深入。
2024-07-27 15:54:12
1241
原创 网易云音乐仿写总结
网易云音乐的仿写不算太难,用到了很多之前学过的知识,让我对这些知识的认识深刻了许多,也学到了许多新的知识,希望接下来可以继续进步。
2024-07-20 18:36:55
496
原创 ZARA仿写总结
这就是zara仿写的主要内容,总的来说还是比较简单的,许多时间其实是花在调整控件的外观上面,要实现的功能不多,不过刚开始写可能会有点迷茫。
2024-07-20 17:11:32
492
原创 UI学习——cell的复用和自定义cell
在iOS开发中,"自定义单元格"(Custom Cell)是指开发者根据具体的设计需求,创建特定样式和功能的单元格,这些单元格用于UITableView或UICollectionView中,以展示数据。个性化设计要求: 当系统提供的单元格样式无法满足应用的设计需求时,就需要通过自定义单元格来实现特定的界面和布局。复杂的数据展示: 如果需要在单元格中显示复杂的数据结构(如图文混排、动态控件集合等),使用自定义单元格可以更灵活地控制数据的展示方式。优化性能。
2024-06-16 17:50:30
1176
原创 登陆界面案例和照片墙案例
照片墙案例需要用到UIView的userInteractionEnabled属性。这个属性设置为YES后,用户才可以与UIView进行交互。需要创建一个ImageViewController。这里实现一个登陆界面的案例,只实现最基础的界面。用户名和密码登录需要UILabel和文本输入框。登陆和注册通过两个按钮和警告对话框实现。
2024-06-16 17:07:02
401
原创 OC语言学习——UI(一)
UIViewController是一个视图控制器,创建完视图控制器对象后,要对它进行赋值操作。视图控制器提供了许多控制器的基本功能,因为它是所有控制器的基类视图控制器负责创建和管理一组视图,它本身就提供了一个视图,称为该控制器的根视图(view),协调管理数据和视图之间的交互。3.将新建的视图加入到父视图中实现了两项功能:(1)将新建的视图显示到屏幕上(2)将新建的视图作为父视图的子视图来管理。3.视图的移动是通过定时器的方法里的事件函数实现的,也就是说,视图的移动要写在定时器调用的方法的事件函数里。
2024-06-02 18:27:30
1561
原创 mac上关于git的使用
Git 是一种分布式版本控制系统,即,代码的本地克隆就是一个完整的版本控制存储库。通过这些功能齐全的本地存储库,无论脱机还是远程都能轻松工作。开发人员会在本地提交其工作,然后再将存储库的副本与服务器上的副本进行同步。这种范例不同于集中式版本控制,后者要求客户端必须先与服务器同步代码,然后才能创建新版代码。接下来介绍mac上如何使用git。
2024-05-26 16:58:22
1199
原创 OC语言UI学习笔记——滑动条和进度条
滑动条和进度条是视图·控制器的两种属性 要在接口部分声明并完成实现过程。在事件函数中添加一段,使进度条进度与滑动条比例同步即可。用代码演示一下UIProgressView的功能。这里设置了进度条的颜色、位置、大小等特点,进度条一般用表示下载进度或视频播放进度。滑动条一般用来表示音量等大小可变的量。为滑动条添加事件的操作与进度条类似。可以使用算法通过滑动条修改进度条。
2024-05-26 15:56:12
479
原创 OC语言UI学习笔记——UILable和UIButton
它里面有origin和size两个成员变量,而origin和size又是两个结构体,其中origin的类型是CGPoint结构体,它里面包含一个x和一个y作为坐标;调用UIColor的颜色方法时,如红色:[UIColor redColor],传入clearColor可以使背景颜色透明。UIButton是UIKit框架中的一个类,是继承于UIView,用于创建可点击的按钮控件。UIButton只能通过类方法来创建,不能通过alloc来申请内存,因为它是自己管理内存的。可以创建自定义按钮来将图片贴到按键上。
2024-05-26 15:25:54
452
原创 oc学习笔记——深浅拷贝
有关于自定义类,对于这个类本身,无论copy还是mutablecopy都是深拷贝,但是对于类中指针类型的属性,如果使用=或者copy,那么该属性是浅拷贝,如果调用mutablecopy方法,那么该属性是深拷贝。注意⚠️:想要对自定义类调用copy或者mutablecopy时,要遵守NScopying或者NSMutableCopying协议,重写copywithzone或者mutablecopywithzone方法。
2024-05-19 17:49:58
794
1
原创 复制方法原来这么有趣!——oc对象复制
接下来用代码示范一下复制对象:这段代码在复制对象的部分就定义了一个HUspy类,并且遵守并实现了NSMutbaleCopy协议,重写了mutableCopyWithZone方法,在主函数中,便可以调用方法将huanghun变量复制给aniya变量,修改aniya的值对huanghun没有影响最后一个部分,还演示了浅复制的效果,深浅复制的内容在下一目讲解。
2024-05-12 17:47:24
568
1
原创 !是oc中的字符串——NSString和NSMutableString
oc语言中有两个字符串:NSString和NSMutableString。NSString代表字符序列不可变的字符串,而NSMutableString代表字符序列可变的字符串。
2024-05-07 22:10:57
565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人