自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 iOS—分类、load 、initialize

分类的结构struct _category_t { const char *name; //分类所属的类名 struct _class_t *cls; const struct _method_list_t *instance_methods; //实例方法 const struct _method_list_t *class_methods; //类方法 const struct _protocol_list_t *protocols; //协议 const s

2021-09-13 21:43:13 421

原创 iOS—事件传递、响应者链

文章目录UIKit继承图UIEventUIResponder注意响应者第一响应者响应者链事件处理的过程第一步,寻找第一响应者第二步,响应UIEvent事件UIControl的Target-Action设计模式扩大点击范围穿透UIKit继承图UIEvent在iOS中,当一个事件发生时,系统会搜集相关事件信息,创建一个UIEvent对象。iOS中的事件类型:触摸事件加速计事件(运动事件)远程遥控事件一个事件的周期:事件的产生—事件的传递—事件的响应事件传递和事件响应的区别:事件传递是

2021-09-04 19:50:33 484

原创 iOS—UICollectionView的简单使用

文章目录UICollectionView与UITableView实现一个简单的九宫格类布局UICollectionView的代理方法UICollectionViewDataSource协议UICollectionViewDelegate协议使用FlowLayout进行灵活布局UICollectionViewFlowLayout相关属性方法动态的配置layout的相关属性UICollectionViewDelegateFlowLayout自定义FlowLayout进行瀑布流布局进行自定义瀑布流布局UIColl

2021-08-18 21:33:44 1255

原创 iOS—RunLoop详解

文章目录什么是RunLoopRunLoop结构RunLoop的运行逻辑RunLoop在实际开发中的应用解决NSTimer在滑动时停止工作的问题线程保活什么是RunLoop一般来说,一个线程一次只能执行一个任务,执行完成后线程就会退出。而runloop,运行循环,可使线程能随时处理时间但并不退出。当没有事件时,runloop会进入休眠状态,有事件发生时,runloop在进行相应的处理事件。runloop可以让线程在需要做事的时候忙起来,不需要的时候让线程休眠。runloop基本作用保持程序的持续运

2021-08-13 17:56:57 3250

原创 iOS—NSURLSession简单使用

文章目录NSURLSession使用NSURLSession,苹果对它的定位是作为NSURLConnection的替代者NSURLSession只提供了异步请求方式而没有提供同步请求方式NSURLSession使用

2021-08-08 03:03:34 668

原创 iOS—持久化的几种方案

文章目录数据持久化数据持有化方式分类内存缓存磁盘缓存沙盒持久化方式数据持久化iOS中的永久存储,也就是在关机重新启动设备,或关闭应用时不会丢失数据。在实际开发中,往往需要持有存储数据的。数据持有化的目的快速展示,提升体验已经加载过的数据,用户下次查看的时候,不需要再次从网络(磁盘)加载,直接展示给用户节省用户流量(节省服务器资源)对于较大的资源数据进行缓存,下次展示无需下载消耗流量同时降低了服务器的访问次数,节约服务器资源离线使用记录用户操作数据持有化方式分

2021-08-07 20:40:43 2130 2

原创 iOS—单例模式

单例模式保证一个类只有一个实例,并且提供一个全局的访问入口系统为我们提供了哪些单例类UIApplication(应用程序实例类)NSNotificationCenter(消息中心类)NSFileManager(文件管理类)NSUserDefaults(应用程序设置)NSURLCache(请求缓存类)NSHTTPCookieStorage(应用程序cookies池)不同的位置存放的变量以及释放时机单例对象一旦创建,对象指针编译时分配内存,保存在静态区,程序结束运行时由系统释放,单例对象

2021-08-07 01:18:02 429 1

原创 iOS—NSOperation、NSOperationQueue简单了解

文章目录NSOperation、NSOperationQueue为什么要使用NSOperation、NSOperationQueueNSOperation、NSOperationQueue操作和操作队列NSOperation、NSOperationQueue使用步骤NSOperation、NSOperation基本使用创建操作使用子类NSInvocationOperation使用子类NSBlockOperationNSOperation、NSOperationQueueNSOperation、NSOpe

2021-08-06 14:58:20 497 1

原创 iOS—pthread、NSThread简单了解

文章目录pthreadpthread的使用pthread其他相关方法NSThread创建、启动线程线程相关用法线程状态控制方法线程之间的通信NSThread线程安全pthreadpthread是一套通用的多线程API,可以在Unix/Linux/Windows等系统跨平台使用,使用C语言编写,需要程序员自己管理线程的声明周期,使用难度较大,在iOS开发中,几乎不使用pthread。pthread的使用首先写头文件#import<pthread.h>创建线程,并开启线程执行任务p

2021-08-05 19:09:58 335

原创 iOS—GCD详解

文章目录多线程编程进程线程线程与进程的关系多线程编程多线程编程的问题GCD什么是GCDGCD任务和队列GCD的使用步骤队列的创建队列的获取任务的创建方法任务与队列不同组合方式的区别同步执行 + 并发队列异步执行 + 并发队列同步执行 + 串行队列异步执行 + 串行队列同步执行 + 主队列在主线程中调用 同步执行+主队列在其他线程中调用 同步执行+主队列异步执行 + 主队列GCD其他方法GCD栅栏方法:dispatch_barrier_asyncGCD延时执行方法:dispatch_afterGCD 一次性代

2021-08-05 11:34:17 5418

原创 iOS—KVC本质

文章目录KVC一些API集合运算符setValue:forKey: 原理,赋值过程ValueForKey:原理,获值过程一些问题未完未完未完 后续补充KVCKVC全称是Key-Value-Coding,键值编码,可以通过一个key来访问某个属性一些API常见的API:setValue: forKey:setValue: forKeyPath:valueForKey:valueForKeyPath:key与keyPathkey:只能访问当前类所具有的属性keyPath:除了能访问当

2021-08-03 09:45:25 113

原创 iOS—KVO用法及本质

文章目录KVOKVO 的使用KVO本质总结一些问题KVOKVO全称KeyValueObserving,键值监听,是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属性的改变,并在改变时接受到事件。KVO 的使用三个方法注册观察者addObserver:(nonnull NSObject *) forKeyPath:(nonnull NSString *) options:(NSKeyValueObservingOptions) context:(nullable void *)ob

2021-08-02 17:33:53 286

原创 iOS—strong、weak的实现以及dealloc的调用流程

文章目录__strong修饰符ARC在编译器、运行期做了哪些工作?__weakobjc_initWeak 、objc_destoryWeak__strong修饰符命令行使用下面的命令来将 Objective-C 代码转成 LLVM 中间码clang -S -fobjc-arc -emit-llvm main.m -o main.llLLVM中间码如下:define i32 @main(i32 %0, i8** %1) #0 { %3 = alloca i32, align 4 %4 =

2021-07-30 22:07:18 732

原创 iOS—属性关键字

文章目录系统默认关键字原子性读写权限引用计数assignunsafe_unretainedweakstrongcopy系统默认关键字基本数据:atomic,readweite,assignOC对象:atomic, readwrite,strong属性的各种特质设定会影响编译器所生成的存取方法原子性原子操作,可以理解为不可被中断的一个或一系列操作atomic,系统自动生成的setter、getter方法会进行加锁操作,仅保证属性读写安全,且耗性能nonatomic,系统自动生成的sett

2021-07-29 10:11:29 315

原创 iOS—[self class]和[super class]

先上一段代码Person类继承NSObjectStudent类继承Person//Person类 继承自NSObject#import <Foundation/Foundation.h>@interface Person : NSObject@end#import "Person.h"@implementation Person@end//Student类 继承自Person#import "Person.h"NS_ASSUME_NONNULL_BEGIN

2021-07-28 15:35:49 374

原创 iOS—对象的本质(学习笔记)

OC底层实现是c\c++,oc的面向对象都是基于c\c++实现NSObject c++ 底层结构struct NSObject_IMPL { //CLass 指针,64位占8个字节 __unsafe_unretained Class isa;};//Classtypedef struct objc_class *Classoc中的定义@interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILIT.

2021-07-22 20:44:36 195

原创 iOS—从源码分析retain、release、retainCount实现

文章目录isa简单了解sideTables、sideTable 简单了解retainCount实现retain 实现release实现retain、release过程大总结:objc_autoreleaseReturnValue实现objc_retainAutoreleasedReturnValue实现isa简单了解每个OC对象都含有一个isa指针,__arm64__之前,isa仅仅是一个指针,保存着对象或类对象内存地址,在__arm64__架构之后,apple对isa进行了优化,变成了一个共用体(un

2021-07-20 16:10:53 790 1

原创 iOS—Blocks的实现

Block的实质Block是“带有自动变量值的匿名函数”。我们可以通过clange -rewrite-objc 源代码文件名,将源代码转换为c++源代码。先在main.m写一个简单的block通过clang可转换为:struct __main_block_impl_0 { struct __block_impl impl; struct __main_block_desc_0* Desc; __main_block_impl_0(void *fp, struct __main

2021-06-02 16:35:57 378 2

原创 iOS—手势操作

手势识别器—UIGestureRecognizerUIGestureRecognizer是一个抽象类,将触摸事件封装成了手势对象,大大简化了开发者的开发难度,同时也提升了用户的交互体验。UIGestureRecognizer有七个子类,它们具体实现了不同手势的功能。可以通过继承 UIGestureRecognizer 类,实现自定义手势(手势识别器类)UIGestureRecognizer 的继承关系如下:...

2021-04-25 16:24:25 166

原创 iOS内存管理—ARC

ARC有效时,对象类型必须附加所有权修饰符,所有权修饰符一共四种__strong修饰符__weak修饰符__unsafe_unretained修饰符__autoreleasing__strong__strong修饰符是id类型和对象类型默认的所有权修饰符。在没有明确指定所有权修饰符时,默认为__strongid obj = [[NSObject alloc] init];//实际为id __strong obj = [[NSObject alloc] init];附有__s

2021-04-20 20:55:21 222 1

原创 Xcode下使用bits/stdc++.h 头文件

Xcode下使用bits/stdc++.h 头文件bits/stdc++.h 头文件,“万能头文件”。这个头文件包含了所有 C++ 标准库,这样我们就不用一个一个将我们需要的头文件包含进来问题在Xcode中,第一次用bits/stdc++.h 头文件时解决:在/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1目录下新建bits文件夹,再将stdc++.

2021-04-14 17:16:13 1884 3

原创 iOS内存管理—MRC

任何继承了NSObject的对象都需要进行内存管理,其他非对象类型(int、char、float、double、struct、enum等不需要进行内存管理继承了NSObject的对象存储在操作系统的堆里,堆一般由程序员分配释放,程序结束时可能有OS回收。非OC对象一般放在操作系统的栈里,栈由操作系统自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈(先进后出)内存管理模型自动垃圾收集手动引用计数自动引用计数手动引用计数MRC引用计数器,可以理.

2021-04-08 21:37:54 632 1

原创 《Effective Objective-C 2.0》——读书笔记(一)

文章目录一、 了解OC二、向前声明 @class三、多用字面量语法,少用与之等价的方法四、多用类型常量,少用#define预处理指令五、用枚举表示状态、选项、状态码一、 了解OCOC使用动态绑定的消息结构,而非“函数调用”。 消息与函数调用的关键区别在于:使用消息结构的语言,其运行时所应执行的代码由运行环境决定;而使用函数调用的语言,则由编译器决定。使用消息结构的语言,不论是否多态,总是在运行时去查找所要执行的方法。二、向前声明 @class在.h文件中使用@class,向前声明所要引用的类,此时

2021-01-24 01:41:32 207 1

原创 iOS—单例模式

什么是单例模式?一个单例类,在整个程序中只有一个实例,并且提供一个类方法供全局调用,在编译时初始化这个类,然后一直保存在内存中,到程序(APP)退出时由系统自动释放这部分内存。系统提供的单例类UIApplication(应用程序实例类)NSNotificationCenter(消息中心类)NSFileManager(文件管理类)NSUserDefaults(应用程序设置)NSURLCache(请求缓存类)NSHTTPCookieStorage(应用程序cookies池)什么时候选择

2020-09-26 21:49:54 214

原创 iOS—ViewController生命周期

loadView:加载view。这个方法中,要正式加载View了,控制器 view 是通过懒加载的方式进行加载的,即用到的时候再加载。在 view 加载过程中首先会调用 loadView 方法,在这个方法中主要完成一些关键 view 的初始化工作。接下来就是加载 view,加载成功后,会接着调用 viewDidLoad 方法,这里要记住的一点是,在 loadView 之前,是没有 view 的,也就是说,在这之前,view 还没有被初始化。此方法在控制器的view为nil的时候被调用。死循环 若 loa.

2020-09-25 01:20:07 264

原创 iOS—push和present区别(含dismiss多级的方法)

push和present都可以推出新的页面,present推出的是模态视图。present一般用于不同业务界面的切换,push一般用于同一业务不同界面之间的切换present与dismiss对应,push和pop对应。present只能逐级返回,push所有视图由视图栈控制,可以返回上一级,也可以返回到根视图、其他视图。push方法 NextViewController *next = [[NextViewController alloc] init]; [self.navigati.

2020-09-24 01:46:52 2068

原创 iOS—折叠单元格

思路点击按钮或cell单元格来进行展开收缩, 同时使用一个BOOL值记录单元格展开收缩状态。根据BOOL值对tableView的高度和button的image进行实时变更。注意点:在执行- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath( 点击当前单元格)方法时,收缩单元格,显示当前点击的单元格的内容。这一步骤的实现是对存储单元格内容的可变数组进行更改。代码//V

2020-09-12 01:19:15 264

原创 iOS—block传值

以登录注册页面举例代码这里省略掉登录、注册页面中的view.h view.m登录页面中有: loginButton,registerButton,nameTextfield,passTextField;注册页面中有:confirmButton,nameTextfield,passTextField//注册 RegisterView.h中#import <UIKit/UIKit.h>#import "RegisterView.h"NS_ASSUME_NONNULL_BEGIN

2020-09-08 18:36:03 178

原创 iOS—通知、代理简单比较

代理:是一种通用的设计模式。顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。实现代理模式有特定的语法,代理主要由三部分组成:协议:用来指定代理双方可以做什么,必须做什么。代理:根据指定的协议,完成委托方需要实现的功能。委托:根据指定的协议,指定代理去完成什么功能。通知:观察者模式,由通知中心进行消息接收和消息广播。比较:功能:都可以完成对象之间的通信效率:代理比通知高关联:delegate是强关联,委托和代理双方互相知

2020-08-15 23:44:04 345

原创 iOS—通知的简单使用

简单介绍通知:NSNotification,它的实质是程序内部提供的一种广播机制。把接受到的消息根据内部消息转发表,将消息转发给需要的对象。常用来页面间的传值。实现通知的步骤:创建通知—>发布通知—>注册通知—>调用接受通知后调用的方法NSNotification通知类,由这个类创建的对象是一个通知对象。这个类中有三个属性//消息对象的唯一标识,接受通知消息时用来辨别,可以理解为通知的名字@property (readonly, copy) NSNotificationNam

2020-08-13 10:45:11 459

原创 iOS—网络请求笔记

//对textField实时监听- (void)textFieldDidChange:(UITextField *)textField { //设置请求地址 NSString *str = [NSString stringWithFormat:@"https://geoapi.heweather.net/v2/city/lookup?location=%@&key=c2155cc73435455ebc84b8fc952d8b26", textField.text]; NS

2020-08-09 18:57:55 220

原创 iOS—协议传值

协议传值,反向传值,将值从第二个界面传回第一个界面。协议传值的六步:声明协议,自定义声明一个协议方法声明代理人属性遵守协议设置代理实现协议方法执行协议方法代码://SecondViewController.h 文件中#import <UIKit/UIKit.h>//第1步//声明协议@protocol PassValueDelegate <NSObject>//自定义协议方法- (void)passContent:(NSString *)cont

2020-07-30 21:45:36 169

原创 iOS—自定义cell及两种复用方式

首先,在这里反省一下自己,在遇到问题的时候没有及时去解决,这一点很不好,得改建立MyTableViewCell文件继承于UITableViewCell// MyTableViewCell.h文件@interface MyTableViewCell : UITableViewCell@property UILabel *label;@property UIButton *btn;@end//MyTableViewCell.m文件#import "MyTableViewCell.h".

2020-07-20 04:09:04 2790

原创 OC——类别、扩展

一、类别Objective-C 的动态特征允许使用类别为现有的类添加新方法,并且不需要创建子类,不需要访问原有类的源代码。通过使用类别即可动态地为现有的类添加新方法,而且可以将类定义模块化地分布到多个相关文件。1. 类别的组成类别由接口和实现部分组成。接口部分语法格式如下:@interface 已有类 (类别名)// 方法定义...@end实现部分语法格式如下:@implementation 已有类 (类别名)// 方法实现...@end一般习惯将类别的接口文件命名为“类名

2020-06-27 22:15:29 352 4

原创 OC— ==与isEqual

==运算符使用 == 来判断两个变量当两个变量是基本类型的变量,且都是数值型,则只要两个变量的值相等,使用 == 判断将返回真。当两个变量是指针类型,它们必须指向同一个对象(即指针变量保存的内存地址相同)时,使用==判断则为真。isEqualisEqual:方法是NSObject类提供的一个实例方法。NSObject默认提供的isEqual:只是比较对象的地址,即NSObject类的isEqual:方法比较的结果与== 运算符比较的结果相同。但在实际应用中常常需要 自定义相等标准,可以通过重写i

2020-06-21 02:35:06 337 1

原创 OC—对封装、继承、多态的理解

一、封装理解封装将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。对一个类或对象实现良好的封装,可以实现以下目的隐藏类的实现细节让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问可进行数据检查,从而有利于保证对象信息的完整性便于修改,提高代码的可维护性访问控制符Objective-C提供了4个访问控制符:@private、@package、@protected

2020-06-13 21:04:19 395

原创 力扣75. 颜色分类 题解

力扣73. 颜色分类想法:使用常数空间的一趟扫描算法。定义三个指针left,right,p。left作为左端点,right作为右端点,p初始值为0,移动p对nums[p]进行判断,为0则与nums[left]交换,交换后p++,left++ 。为2,则与nums[right]进行交换,注意这里不能交换完就p++ ,因为原本的nums[right]并未做出判断,交换后则需要再进行判断,随后进行相应的自加。代码:void sortColors(int* nums, int numsSize){

2020-05-24 00:06:13 336

原创 文件的打开、关闭、读写

文章目录一、简单介绍1. 文件是什么?2. 文件的操作流程3. 如何操作文件二、对文件的操作1. 文件的打开与关闭1.1打开文件1.2 关闭文件2. 文件的读写2.1 文件的顺序读写2.1.1 单字符读写函数(fgetc fputc)2.1.2 字符串读写函数(fgets fputs)一、简单介绍1. 文件是什么?文件通常是在磁盘或固态硬盘上的一段已命名的存储区,是指存放在外部存储介质(可以...

2020-05-07 22:41:08 2146

原创 二分查找基础总结

文章目录一、基本思想二、问题1.在有序数组(非降序)中查找定值2. 在有序数组(非降序)查找第一个等于定值的元素3.在有序数组(非降序)中查找最后一个等于定值的元素4. 在有序数组(非降序)中查找第一个大于target的值5. 在有序数组(非降序)中查找最后一个小于target的值三、总结一、基本思想二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/...

2020-04-30 22:09:00 504 1

原创 快慢指针应用小结

文章目录一、对快慢指针的理解二、应用1.链表的中间结点2.判断单链表是否存在环3.输出链表中倒数第k个节点一、对快慢指针的理解快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。二、应用1.链表的中间结点题目(力扣876):给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第...

2020-04-25 16:32:22 333

空空如也

空空如也

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

TA关注的人

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