自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode剑指offer(中等难度题)

一些中等题

2022-11-09 11:36:58 1017

原创 LeetCode算法题练习——题解

leetcode部分题解

2022-11-09 11:36:24 541

原创 【iOS开发】——事件传递链和事件响应链

看看这两个Button重合在了一起,我们都知道点击1区域是粉色Button响应了,点击3区域是蓝色区域响应了,那我们点击区域2呢,谁来响应?我们来写一下代码,既然要重新定义Button的尺寸信息,那我们就自定义一个类继承于UIButton。和点击穿透事件一样我们来重写一个类继承于UIButton,然后重写其中的方法来达到我们想要的效果。因为我们重写了蓝色按钮的hitTest方法,所以此时我们依次点击区域1,2,3。但要注意,它只是被放大了,放大之后仍有一个范围超过范围点击不会触发点击事件。...

2022-08-14 00:18:55 825

原创 【iOS开发】——Category底层原理、Extension、关联对象

Category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别其实都是指的Category。Category的主要作用是为已经存在的类添加方法。通常情况下我们可以把类的实现分开在几个不同的文件里面,这样做的好处是:除此之外,Category还有几个应用场景:所以关于方法的调用优先级:> > 。即,优先调用cateory中的方法,然后调用本类方法,最后调用父类方法。注意⚠️:category是在运行时加载的,不是在编译时。Category的使用方法十分简单,如果感兴趣可以看看i

2022-08-12 23:47:25 1397

原创 【iOS开发】——KVO与KVC

iOS开发——KVO与KVC

2022-08-03 19:20:38 1752

原创 【iOS开发】——weak底层原理

weak的原理在于底层维护了一张结构的hash表,key是所指对象的地址,value是weak指针的地址数组。weak关键字的作用是弱引用,所引用对象的计数器不会加1,并在引用对象被释放的时候自动被设置为nil。对象释放时,调用函数根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。SideTable、、这样三个结构,它们之间的关系如下图所示httpshttpshttpshttpshttps。...

2022-07-31 07:47:39 1260

原创 【iOS开发】——属性关键字

在类中定义属性时,总会使用到@property进行定义,下面就来说说@property的使用。在使用过程中,如果需求公开且在其他类中使用时,通常会定义在.h头文件中;而如果只是该类自已需要使用,这时则会定义在.m实现文件中。所以我们平时可以看到有的属性定义在.h文件中,有的属性定义在.m文件中,就是这个原因。使用方法:那么属性关键字有哪些呢?atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。atomic:系统生成的 getter/setter 会保证 get

2022-07-31 01:52:13 309

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

首先我们了解了什么是消息发送,明白了OC语言中所有对象的方法调用都是消息发送。其次我们知道了消息发送是SEL-IMP的查找过程调用resolveInstanceMethod或者resolveClassMethod作为动态解析方法给本类一个补救的方法去动态添加没有实现的方法的实现调用forwardingTargetForSelector让别的对象去执行这个函数(消息转发)forwardInvocation灵活的将目标函数以其他形式执行(我们的这个完整的消息转发的实现可以很简单https。...

2022-07-24 22:31:47 3316

原创 【iOS开发】——ARC(自动管理内存)的一些补充

所谓ARC就是自动管理内存,因为在以前内存管理是由程序员自己手动管理的想想就很头疼,所以就有了自动的引用计数(AutomaticReferenceCount简称ARC)的概念,引用计数是一个简单而有效的管理对象生命周期的方式。当我们创建一个对象时,它的引用计数就为1,当有一个新的指针指向它时,其引用计数就加1,当对象的引用计数变为0时,说明这个对象不再被任何指针指向了,这个时候我们就可以将对象销毁,回收内存。引用计数简单有效,帮助我们解决了关于内存管理的问题,所以引用计数也是ARC的基础。...

2022-07-24 22:31:31 698

原创 【iOS开发】——MRC(手动内存管理)的一些补充

iOS开发——MRC(手动内存管理)最近在复习MRC,发现当时总结的时候有几个点没有总结上,今天在写一篇补充记录一下。

2022-07-24 22:31:04 659

原创 【iOS开发】底层探索之对象的底层结构(下)——isa、继承链

isa是什么?接上一章节来说,OC对象的本质为, 为 的 结构体,每个OC实例都会包含一个继承自的 指针。但是在__arm64__之前,isa仅仅是一个指针,保存着对象或类对象内存地址,在__arm64__架构之后,apple对isa进行了优化,变成了一个共用体(union)结构,同时使用位域来存储更多的信息。isa是一个指向Class的指针,那么isa的本质又是什么呢?所以isa指针也可以称为isa_t结构体:其中 是一个宏定义,在arm64的环境下具体内容如下:可以看到在 isa_t 联合体中不仅

2022-07-24 22:30:43 452

原创 【iOS开发】底层探索之对象的底层结构(上)——关于类与对象

对象的本质是一个结构体,而id,是指向这个结构体的指针,也就是我们平时Person*p=[Personalloc]init];的话,代表我们创建了一个Person对象分配了地址,并且把他的地址给了p这个指针,我们是通过p来操作对象,或者说p代表了对象,但p并不是对象本身。而对象是存在于内存里的一个结构体。}*id;};每个对象都有一个类,所以对象的isa指针指向哪个类,此对象就属于哪个类。OC对象在发送消息时,运行时库会追寻着对象的isa指针得到对象所属的类。,...

2022-07-24 00:21:19 514

原创 【iOS开发】编译与链接

编译与链接

2022-07-24 00:20:36 329

原创 iOS开发——工厂设计模式

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

2022-06-10 19:45:03 774

原创 iOS开发——AFNetworking源码(二)

上篇文章主要介绍了AFNetworking的简单介绍和使用,熟悉了AFNetworking的基本结构,那么本文我们主要介绍一下网络通信模块(AFURLSessionManger,AFHTTPSessionManager),首先我们来看看这两个类之间的关系,以及他们内部都包含哪些模块,用来做什么的,我们先来看一下下面这张图:由上图可见,首先AFURLSessionManger是AFHTTPSessionManager的父类,其中AFURLSessionManger内部还包含AFURLSessionManag

2022-06-01 22:32:11 1278

原创 iOS开发——AFNetworking源码(一)

iOS开发——AFNetworking源码(一)简介我们在学习AFNetworking之前,就必须知道AFNetworking是什么,具体有什么作用?首先,AFNetworking是一个功能非常强大的框架,主要是用于网络请求,把复杂的原生代码封装好,我们只需要简单的几步就可以完成网络请求。代码组成从上图可以看出AFNetworking中含有很多类,那么这些类与类之间有什么关系呢,具体关系如图所示:我们来解读一下这个图,按照我的理解来说,显而易见的是AFURLSessionManager应该是主

2022-05-29 17:10:19 1839

原创 iOS开发——SDWebImage源码

SDWebImage的具体功能SDWebImage是一个开源的第三方库,它提供了UIImageView的一个分类,以支持从远程服务器下载并缓存图片的功能。它具有以下功能:一个异步的图片加载器。一个异步的内存+磁盘图片缓存支持GIF、WebP图片后台图片解压缩处理确保同一个URL的图片不被多次下载确保非法的URL不会被反复加载确保下载及缓存时,主线程不被阻塞。在最开始先简单介绍这个框架:这个框架的核心类是SDWebImageManger,在外部有UIImageView+WebCache

2022-05-22 14:47:20 748

原创 iOS开发——ARC

iOS开发——ARC什么是自动引用计数内存管理/引用计数内存管理的四个法则__strong修饰符什么是自动引用计数顾名思义,自动引用计数(ARC)是指内存管理中对引用采取自动计数的技术。我们知道以前的程序员关于内存管理是手动管理的也就是MRC,在后来才引入了ARC。那么关于ARC相比于MRC最大的优化是什么呢?总结一下就是:**在LLVM编译器中设置ARC为有效状态,就无需再次键入retain或者是release代码。**这样就会在降低程序崩溃、内存泄漏等风险的同时,很大程度上减少了开发程序的工作量。如

2022-05-15 17:35:07 1199

原创 iOS开发——MRC(手动内存管理)

iOS开发——MRC(手动内存管理)内存分配区域栈区堆区总结常量区总结代码区总结全局区关于如何查看一个对象在堆区 / 栈区我们要想了解内存管理的知识前,必须先搞明白计算机的内存分配以及计算机是如何处理内存的。内存分配区域内存指的就是RAM(random access memory),内存分配区域主要分为五个区:栈区(系统管理的地方)、堆区(程序员控制的地方)、静态区(全局区)、常量区、代码区。栈区栈区(stack)由编译器自动分配并释放,存放的是函数的参数值,局部变量,基本类型的变量和对象引用类型

2022-05-04 19:48:09 1541 1

原创 iOS开发——Blocks

Blocks什么是Blocks什么是BlocksBlocks是C语言的扩充功能。可以用一句话来表示Blocks的扩充功能:带有自动变量(局部变量)的匿名函数。按理说,C语言的标准不允许存在这样的函数。匿名函数就是不带函数名称的函数,那么带有自动变量是什么意思呢?Blocks提供了类似由C++和OC类生成实例或对象来保持变量值的方法。如“带有自动变量值”,Blocks保持自动变量的值。同时Blocks也被称作闭包、lambda计算。OC的Block在其他程序语言中的名称如图所示:...

2022-04-23 15:55:13 2414

原创 iOS——nil、Nil、NULL和[NSNull null]的区别

iOS——nil、Nil、NULL和[NSNull null]的区别首先我们先来看一下苹果文档上的解释:nil:Defines the id of a null instance.(定义空实例的id)Nil:Defines the id of a null class.(定义空类的id)NULL:Returns the singleton instance of NSNull.(返回NSNull的单例实例)NSNull:A singleton object used to represent n

2022-04-17 16:16:28 3257

原创 [iOS开发]网络请求之---GET和POST

[iOS开发]网络请求之—GET和POSTGET和POST的区别从字面意思来看,GET是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求GET是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改GET请求的参数会跟在url后进行传递,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,%XX中的XX为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE

2022-03-27 13:10:55 1214

原创 iOS——常用的手势总结

iOS——常用的手势总结前言我们在平时玩手机的时候都知道关于手势的重要性,在加入手势的应用时,使我们的App变得更加方便使用,那么具体iOS有几种常用的手势呢?下面我简单的总结一下那些关于iOS最常用的手势。关于手势的应用iOS提供了UIGestureRecognizer类。手势识别UIGestureRecognizer类是个抽象类,下面的子类是具体的手势,开发这可以直接使用这些手势识别:使用手势的步骤使用手势很简单,分为两步:创建手势实例。当创建手势时,指定一个回调方法,当手势开始,改变、或

2022-03-19 20:11:21 3366

原创 iOS—— UIPickerView

iOS—— UIPickerView前言在绝大部分App中,我们都可以见到一个强大的控件——UIPickerView,它可以用来选择地区,选择时间等等,所以如何掌握UIPickerView就变得特别重要,下面简单的说一下UIPickerView的实现过程:实现过程UIPickerView的创建类似于UITableView的建立,首先,UIPickerView是需要遵循数据源和代理两个协议的,所以我们在使用前需要先添加这两个协议:@interface ViewController : UIVie

2022-03-13 21:06:05 1729

原创 [iOS开发]——系统框架(effectiveOC2.0阅读笔记)

系统框架第47条:熟悉系统框架要点第48条:多用块枚举,少用for循环for循环使用 Objective-C 1.0的 NSEnumerator 来遍历快速遍历基于块的遍历方式要点第49条:对自定义其内存管理语义的collection使用无缝衔接要点第50条:构建缓存时选用 NSCache 而非 NSDictionary要点第51条:精简 initialize 与load 的实现代码要点第52条:别忘了NSTimer会保留其目标对象要点虽说不使用系统框架也能编写 Objective-C代码,但几乎没人这么

2022-02-27 21:03:47 1862

原创 iOS开发之如何实现“抽屉”效果

iOS开发之如何实现“抽屉”效果现在基本上每一个App中左划都会出现一个页面,基本上都是只占主页面的一部分,效果就像是一个抽屉一样。最近在写项目时,关于如何达到抽屉效果,总结了一些东西。先看看效果图:实现过程首先我们需要去创建一个新的视图控制器,让它作为我们的要实现的抽屉的根视图,在此视图控制器我们要添加对应的左视图,要是需要右视图也可以添加,然后设定方法:@property (nonatomic, strong) UIViewController *rootViewController;//

2022-02-20 17:51:48 2701

原创 [iOS开发]——内存管理(effectiveOC2.0阅读笔记)

[iOS开发]——内存管理(effectiveOC2.0阅读笔记)第29条:理解引用计数属性存取方法中的内存管理自动释放池保留环要点第30条:以ARC简化引用计数使用ARC时必须遵循的方法命名规则变量的内存管理语义ARC如何清理实例变量覆盖内存管理方法要点第31条:在dealloc方法中只释放引用并接触监听要点第32条:编写“异常安全代码”时留意内存管理问题要点第33条:以弱引用避免保留环要点第34条:以“自动释放池块”降低内存峰值要点第35条:用“僵厂对象”调试内存管理问题要点第36条:不要使用retai

2022-02-12 00:12:07 624

原创 [iOS开发]——协议与分类(effectiveOC2.0阅读笔记)

[iOS开发]——协议与分类(effectiveOC2.0阅读笔记)第23条:通过委托与数据源协议进行对象间通信要点第24条:将类的实现代码分散到便于管理的数个分类之中要点第25条:总是为第三方类的分类名称加前缀要点第26条:勿在类中声明属性要点第27条:使用“class-continuation分类”隐藏实现细节要点第28条:通过协议提供匿名对象要点OC语言有一项特性叫“协议”(protocol),它与java的“接口”(interface)类似。OC不支持多重继承,因而我们把某个类应该实现的一系列方法

2022-02-05 14:54:10 597

原创 [iOS开发]——对象、消息、运行期(effectiveOC2.0阅读笔记)

[iOS开发]——对象、消息、运行期第6条:理解“属性”这一概念什么是属性@property语法第6条:理解“属性”这一概念什么是属性“属性”(property)是OC的一项特性,用于封装对象中的数据。OC对象通常会把其所需要的数据保存为各种实例变量。@property语法我们在写代码的时候可以发现OC与其他面向对象的语言不同的地方在于OC很少去定义实例变量的作用域, 因为这样的话对象布局在编译期(compile time)就已经固定了。所以在访问到这些对象时,编译器就会把其替换为“偏移量”(o

2022-01-21 21:03:01 1093

原创 [iOS开发]——熟悉Objective-C

熟悉Objective-C第1条:了解Objective-C语言的起源第2条:在类的头文件中尽量少引入其他头文件第3条:多用字面量语法,少用与之等价的方法字面数值字面量数组字面量字典可变数组和字典局限性总结第4条:多用类型常量,少用#define预处理指令总结第5条:用枚举表示状态、选项、状态码总结Objective-C是扩充C的面向对象编程语言,它在C语言的基础上添加了面向对象的特性。今天学了关于Objective-C的一些知识与特性,基本上可以从五个方面来让我们熟悉Objective-C这门语言:

2022-01-11 22:20:13 2172

原创 iOS——本地推送

iOS——本地推送首先我们要知道本地推送是什么,iOS开发中经常用到本地通知,有时也叫做本地推送,两者都是同一个类UILocalNotification,这个类可以用于开发者灵活控制一些需要推送到通知栏的信息,比如提示信息,日程提醒或者是一些其他应用信息,它和远程通知(也叫远程推送,RemoteNotification)本质没有多大区别,唯一区别在于发起的地方不同,本地通知在APP内发起,而远程通知由远端服务器发起通过APNS推送到设备,两者展示的方式都一样,都会出现在通知栏,都可以携带信息。下面用通过三

2021-12-11 21:34:24 4350

原创 iOS—— 调用高德地图SDK

iOS—— 调用高德地图SDK我们在许多App中可以发现关于地图的调用以及定位等等功能都是什么重要的,比如滴滴打车,美团外卖等等都是十分依赖于地图的。所以我们就应该学会如和去调用地图。本周我就学习了一下如何去调用高德地图。调用高德地图的过程首先我们需要添加第三方库:打开终端,输入’cd’,然后将文件拖入终端第二步,touch Podfile为项目创建Podfile文件打开Podfile文件然后pod 'AMap3DMap’或pod ‘AMap2DMap’其中3D的是3D地图,2D的是2D地图

2021-12-05 18:25:42 3386

原创 iOS——Category

iOS——Category什么是CategoryCategory模式用于向已经存在的类添加方法从而达到扩展已有类的目的,在很多情形下Category也是比创建子类更优的选择。新添加的方法同样也会被被扩展的类的所有子类自动继承。当知道已有类中某个方法有BUG,但是这个类是以库的形式存在的,我们无法直接修改源代码的时候,Category也可以用于替代这个已有类中某个方法的实体,从而达到修复BUG的目的。然而却没有什么便捷的途径可以去调用已有类中原有的那个被替换掉方法实体了。需要注意的是,当准备有Catego

2021-11-27 16:54:46 1723 2

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

iOS——调用系统相册和相机背景我们在许多app里可以发现在换头像的时候一般有两个选择,一个是选择本地照片,一个选择是相机也就是直接拍一张照片当头像,另外还有就是可以去修改照片尺寸,所以我们就要知道这些功能是怎么实现的。实现方法首先我们在调用系统相册或者是调用照相机的时候需要用到UIImagePickerController,使用UIImagePickerController 需要有两个代理,分别是:UIImagePickerControllerDelegate,UINavigationContr

2021-11-27 11:53:59 3825

原创 知乎日报总结

知乎日报总结关于主页面的网络请求首先我是用MVC设计模式去进行架构页面,首先我们在Model里让它去继承第三方库JSONModel,JSONModel是快速方便的把JSON数据转化为ObjectiveC的数据类型,是json转model的第三方开源库。当我们向服务器发送一个请求之后,通过JSONModel把数据转成model中的属性就可以很方便的供给我们使用了。@interface StoriesModel : JSONModel@property (nonatomic, copy) NSStrin

2021-11-23 11:57:48 984

原创 知乎日报第三次小结

知乎日报第三次小结本周主要是完成知乎日报的收藏功能。首先在完成收藏前先学习了一下数据库FMDB的用法:首先什么是FMDB1. FMDB是iOS平台的SQLite数据库框架2. FMDB以OC的方式封装了SQLite的C语言APIFMDB的优点1. 使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码2.对比苹果自带的Core Data框架,更加轻量级和灵活3.提供了多线程安全的数据库操作方法,有效地防止数据混乱FMDB的核心类首先FMDB有三个主要的类:FMDatabase:一个

2021-11-14 20:49:06 2342

原创 知乎日报第二次小结

知乎日报第二次小结这周主要在解决cell的点击事件。首先我们需要先学习WKWebview,我们要在.m文件中加入库函数:#import <WebKit/WebKit.h>我们在使用前同样是需要初始化对象的:WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height*0.9)];在一个新的视图

2021-11-07 15:57:25 119

原创 知乎日报小结

知乎日报小结第一次总结知乎日报,就近两周出现的问题作出总结:首先我们应该用MVC设计模式,在M里我们还是JSONModel,JSONModel是快速方便的把JSON数据转化为ObjectiveC的数据类型,是json转model的第三方开源库。当我们向服务器发送一个请求之后,通过JSONModel把数据转成model中的属性就可以很方便的供给我们使用了。部分代码:@interface StoriesModel : JSONModel@property (nonatomic, copy) NSStr

2021-10-31 19:21:22 153

原创 iOS——Manage封装一个网络请求

iOS——Manage封装一个网络请求我们一般去写网络请求的时候,都是将网络请求写在viewDidLoad中,但现实中却不是这么简单的,我们需要有不同的网络请求的时候就可以用单例模式,创建一个全局的Manage类,用实例Manage来执行网络请求方法,顺便用Manage传递请求数据,在model里完成数据解析。单例在整个生命周期中只需要创建一次,Manager同理,再考虑到唯一性及线程安全,在这里我们给Manager的创建加锁,若已经存在Manager便不再申请。核心代码我们需要用block进行传值,

2021-10-14 20:09:03 191

原创 iOS——JSONModel

iOS——JSONModel简介——什么是JSONModel使用方法JSON转化为模型模型转化为字典模型转化为字符串嵌套模型的数据解析可选属性 (就是说这个属性可以为null或者为空)设置所有的属性为可选(所有属性值可以为空)设置下划线自动转驼峰简介——什么是JSONModel首先我们要了解JSONModel并学会如何使用JSONModel我们就必须要知道JSONModel到底是什么:JSONModel是快速方便的把JSON数据转化为ObjectiveC的数据类型,是json转model的第三方开源库。

2021-10-14 18:30:26 353

空空如也

空空如也

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

TA关注的人

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