
iOS
文章平均质量分 94
Fttt.
这个作者很懒,什么都没留下…
展开
-
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 · 699 阅读 · 0 评论 -
iOS—事件传递、响应者链
文章目录UIKit继承图UIEventUIResponder注意响应者第一响应者响应者链事件处理的过程第一步,寻找第一响应者第二步,响应UIEvent事件UIControl的Target-Action设计模式扩大点击范围穿透UIKit继承图UIEvent在iOS中,当一个事件发生时,系统会搜集相关事件信息,创建一个UIEvent对象。iOS中的事件类型:触摸事件加速计事件(运动事件)远程遥控事件一个事件的周期:事件的产生—事件的传递—事件的响应事件传递和事件响应的区别:事件传递是原创 2021-09-04 19:50:33 · 842 阅读 · 0 评论 -
iOS—UICollectionView的简单使用
文章目录UICollectionView与UITableView实现一个简单的九宫格类布局UICollectionView的代理方法UICollectionViewDataSource协议UICollectionViewDelegate协议使用FlowLayout进行灵活布局UICollectionViewFlowLayout相关属性方法动态的配置layout的相关属性UICollectionViewDelegateFlowLayout自定义FlowLayout进行瀑布流布局进行自定义瀑布流布局UIColl原创 2021-08-18 21:33:44 · 1394 阅读 · 0 评论 -
iOS—RunLoop详解
文章目录什么是RunLoopRunLoop结构RunLoop的运行逻辑RunLoop在实际开发中的应用解决NSTimer在滑动时停止工作的问题线程保活什么是RunLoop一般来说,一个线程一次只能执行一个任务,执行完成后线程就会退出。而runloop,运行循环,可使线程能随时处理时间但并不退出。当没有事件时,runloop会进入休眠状态,有事件发生时,runloop在进行相应的处理事件。runloop可以让线程在需要做事的时候忙起来,不需要的时候让线程休眠。runloop基本作用保持程序的持续运原创 2021-08-13 17:56:57 · 3515 阅读 · 0 评论 -
iOS—NSURLSession简单使用
文章目录NSURLSession使用NSURLSession,苹果对它的定位是作为NSURLConnection的替代者NSURLSession只提供了异步请求方式而没有提供同步请求方式NSURLSession使用原创 2021-08-08 03:03:34 · 885 阅读 · 0 评论 -
iOS—持久化的几种方案
文章目录数据持久化数据持有化方式分类内存缓存磁盘缓存沙盒持久化方式数据持久化iOS中的永久存储,也就是在关机重新启动设备,或关闭应用时不会丢失数据。在实际开发中,往往需要持有存储数据的。数据持有化的目的快速展示,提升体验已经加载过的数据,用户下次查看的时候,不需要再次从网络(磁盘)加载,直接展示给用户节省用户流量(节省服务器资源)对于较大的资源数据进行缓存,下次展示无需下载消耗流量同时降低了服务器的访问次数,节约服务器资源离线使用记录用户操作数据持有化方式分原创 2021-08-07 20:40:43 · 2463 阅读 · 2 评论 -
iOS—单例模式
单例模式保证一个类只有一个实例,并且提供一个全局的访问入口系统为我们提供了哪些单例类UIApplication(应用程序实例类)NSNotificationCenter(消息中心类)NSFileManager(文件管理类)NSUserDefaults(应用程序设置)NSURLCache(请求缓存类)NSHTTPCookieStorage(应用程序cookies池)不同的位置存放的变量以及释放时机单例对象一旦创建,对象指针编译时分配内存,保存在静态区,程序结束运行时由系统释放,单例对象原创 2021-08-07 01:18:02 · 486 阅读 · 1 评论 -
iOS—NSOperation、NSOperationQueue简单了解
文章目录NSOperation、NSOperationQueue为什么要使用NSOperation、NSOperationQueueNSOperation、NSOperationQueue操作和操作队列NSOperation、NSOperationQueue使用步骤NSOperation、NSOperation基本使用创建操作使用子类NSInvocationOperation使用子类NSBlockOperationNSOperation、NSOperationQueueNSOperation、NSOpe原创 2021-08-06 14:58:20 · 920 阅读 · 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 · 529 阅读 · 0 评论 -
iOS—GCD详解
文章目录多线程编程进程线程线程与进程的关系多线程编程多线程编程的问题GCD什么是GCDGCD任务和队列GCD的使用步骤队列的创建队列的获取任务的创建方法任务与队列不同组合方式的区别同步执行 + 并发队列异步执行 + 并发队列同步执行 + 串行队列异步执行 + 串行队列同步执行 + 主队列在主线程中调用 同步执行+主队列在其他线程中调用 同步执行+主队列异步执行 + 主队列GCD其他方法GCD栅栏方法:dispatch_barrier_asyncGCD延时执行方法:dispatch_afterGCD 一次性代原创 2021-08-05 11:34:17 · 6320 阅读 · 0 评论 -
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 · 152 阅读 · 0 评论 -
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 · 435 阅读 · 0 评论 -
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 · 1070 阅读 · 0 评论 -
iOS—属性关键字
文章目录系统默认关键字原子性读写权限引用计数assignunsafe_unretainedweakstrongcopy系统默认关键字基本数据:atomic,readweite,assignOC对象:atomic, readwrite,strong属性的各种特质设定会影响编译器所生成的存取方法原子性原子操作,可以理解为不可被中断的一个或一系列操作atomic,系统自动生成的setter、getter方法会进行加锁操作,仅保证属性读写安全,且耗性能nonatomic,系统自动生成的sett原创 2021-07-29 10:11:29 · 551 阅读 · 0 评论 -
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 · 443 阅读 · 0 评论 -
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 · 258 阅读 · 0 评论 -
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 · 888 阅读 · 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 · 773 阅读 · 2 评论