- 博客(102)
- 问答 (1)
- 收藏
- 关注
原创 Spring整合Mybatis、SpringMVC
记录配置的过程。SSM框架整合首先是配置MybatisspringMVC首先是配置Mybatis新建maven项目在pom.xml引入需要依赖的包<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc
2021-12-26 14:08:33 604
原创 iOS app脚手架
app脚手架概述一个完整的app需要的能力和一些通用的解决方案(三方库)。主流的app都将不同业务(增长、交易、短视频、直播、社区等等不同业务)做成独立的组件,以及支持app运行的基础代码都封装成独立的模块,不仅能提高编译速度,也解除了各个业务的耦合,下面是组件化app的各种基础库。app容器能力组件通信各个组件之间啊采用何种方式通信的中间件比如url-block方式,蘑菇街的方案核心在于这种硬编码#include <dlfcn.h>#include <mach-o/ge
2021-11-09 18:23:38 2457
原创 Swift学习笔记-基础类型
swift是类型安全的swift是类型安全的语言,在代码编译时会做类型检查。值类型Int、Double、Float、String等是值类型的,理解为深复制。枚举增强枚举类型可以支持String等常量和变量常量不可修改OC中实现常量宏定义constreadonly属性(伪常量、子类集成修改set方法)字符串插值在字符串中,使用 () 中进行字符串插值。整数固定位数的整数。Int 和UInt 与当前平台相关的有符号和无符号整数。Double、Float 64、32位浮
2021-10-11 23:35:34 286
原创 isMemberOfClass和isKindOfClass
源码+ (BOOL)isMemberOfClass:(Class)cls { return self->ISA() == cls;}- (BOOL)isMemberOfClass:(Class)cls { return [self class] == cls;}+ (BOOL)isKindOfClass:(Class)cls { for (Class tcls = self->ISA(); tcls; tcls = tcls->getSuperclas
2021-10-10 11:09:03 252
原创 iOS 数组的实现总结
原理:https://www.jianshu.com/p/e95f97304b83原作者经过反汇编,拿到了一些实现数组实现方式是环形缓冲区,在头部和尾部的删除插入进行了优化,在中间的删除和插入遵循最小化原则。#、A、 B、C、D、E、#0 1 2 3 4 5 6‘#’代表这个位置为空。有几个变量:offset记录数组的第一个元素的位置,也就是头部指针。used 存放的个数,如果数组存满了,再增加需要扩容size 当前数组的大小,实例对象调用count返回的是used。以这
2021-09-16 09:56:33 265
原创 objc_autoreleaseReturnValue和objc_retainAutoreleasedReturnValue函数对ARC优化
ARC对注册autoreleasepool优化在ARC下Person.m+ (instancetype)myPerson { Person *temp = [[Person alloc] init]; return temp;}main.m Person *person = [Person myPerson]; NSArray *array = [[NSArray alloc] initWithObjects:person, nil]; NSLog(@"123");非a
2021-05-22 19:34:17 1175 3
原创 iOS图像的绘制-常见术语收集
文章目录绘制像素到屏幕上-常见术语收集软件组成GPUOpenGLframe纹理位图VRAM == 显存 RAM==主存合成完全不透明像素对齐Masks离屏渲染(Offscreen Rendering)drawRect方法layer和View的关系更新机制layer和动画的关系绘制像素到屏幕上-常见术语收集一个像素是怎么绘制到屏幕上去的,聚焦于iOS图像堆栈每个像素由红、绿、蓝三个独立的颜色单元构成软件组成GPU专门为图像高并发计算而量身定做的处理单元。它的高并发使得它能够同时更新所有的像素,并
2021-03-29 15:15:50 318
原创 Section的背景色-UICollectionView
首先你需要自定义这几个类自定义flowLayout重写几个方法: - (instancetype)init - (void)prepareLayout - (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect在我们自定义的flowlayout里需要自定义一个协议这样外部就能穿入一些东西来帮助我们设置组的背景view各种属性@protocol J
2021-02-17 16:51:06 468
原创 关于Masonry的正确使用
之前错误的用法make.top.equal(self.mas_top).offset(self.view.frame.size.height/10);没入职之前,一直认为Masonry约束布局不应该有具体的数值,其实是我的理解出了问题,因为在学校里,没有UI,写的demo的UI是自己摸索,为了适配多种机型,我采用的了等比放大/缩小的方式来写布局,这写法是不对,屏幕并不是按比例扩大和缩小的,我们也不能按比例的去规定。正确做法:一般呢会给俩套UI,小屏和大屏,这俩套UI中有些东西的大小是定死的,比如 头
2021-02-01 17:13:15 195
原创 base64编码、ascll、gbk、unicode、http中的几个常用header介绍
base64编码Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。什么是“可打印字符”呢?为什么要用它来传输8Bit字节码呢?在回答这两个问题之前我们有必要来思考一下什么情况下需要使用到Base64?Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0~31、127这33个字符属
2020-11-29 21:04:17 868
原创 iOS僵尸对象
野指针、悬垂指针野指针是指在创建时未指定指针的所指,比如int *p;这样的指针是不安全的,使用可能产生段错误悬垂指针又叫做迷途指针。通常一个指针指向malloc的对象,这个对象被free掉了后,指针指向没有改变,这时这个指针是悬垂指针,我们需要把它置为nil。因为向已回收的对象发送消息是不安全的,有时可以,有时不行,具体可行与否,完全取决于对象所占内存有没有为其他内容所覆写。而这块内存有没有移作它用,又无法确定,因此,应用程序只是偶尔崩溃。在没有崩溃时,那块内存可能只是复用了其中的一部分,所以
2020-11-24 16:19:37 489
原创 一些Masonry布局问题
一些属性centerX、centerY、centercenter就是中心点,设置center就是设置了中心点的x、ycenterX、centerY是分别设置中心点的x、y用margin解决遮挡iOS 开发小技巧 ---- Masonry 中使用 Margin需要masonry8.0以上edges//设置view与其父视图边距都为0make.edges.mas_equalTo(0);//设置view与其父视图边距都为5make.edges.insets(UIEdgeInse
2020-11-19 12:11:03 454 1
原创 内存管理学习笔记
文章目录数据结构中的栈和堆栈堆完全二叉树内存中的堆和栈内存物理和虚拟寻址地址空间虚拟内存作为缓存的工具数据结构中的栈和堆栈栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表。堆堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。完全二叉树一棵深度为
2020-11-17 22:12:21 600
原创 一个NSObject对象占多大内存
文章目录先说结论探究原理结论先说结论一个NSObject对象占16个字节。探究原理之前runtime系列的文章中写过,编译期会将objc_class结构体中的class_ro_t结构体初始化,那篇文章没有讲是如何初始化的,学完了分类后,在转为c++的代码里我看到了一些眉目。首先这是main.m文件#import <Foundation/Foundation.h>#import "Father.h"@interface Student : NSObject { int _
2020-08-28 21:19:41 584
原创 NSOperation、NSOperationQueue使用
文章目录介绍为什么要使用NSOperation而不是GCD?NSOperation、NSOperationQueue 操作和操作队列使用步骤创建操作使用子类 NSInvocationOperation使用子类 NSBlockOperation使用自定义继承自 NSOperation 的子类创建队列将操作加入队列- (void)addOperation:(NSOperation *)op;- (void)addOperationWithBlock:(void (^)(void))block;NSOperati
2020-08-22 14:04:41 345
原创 pthread、NSThread相关api
文章目录什么是pthreadpthread使用其他方法NSThread创建和启动相关用法状态控制线程通信参考文章什么是pthreadpthread 是一套通用的多线程的 API,可以在Unix / Linux / Windows 等系统跨平台使用,使用 C 语言编写,需要程序员自己管理线程的生命周期,使用难度较大,我们在 iOS 开发中几乎不使用 pthread,pthread使用#import <Foundation/Foundation.h># import <pthread
2020-08-21 11:27:36 215
原创 iOS-GCD详解
文章目录进程、线程、上下文进程上下文线程基本概念任务、队列理解并发和并行的概念GCD使用队列的创建队列获取dispatch_queue_set_specific和dispatch_get_specific设置标识符和获取标识任务创建其他APIGCD 栅栏方法:dispatch_barrier_asyncGCD 延时执行方法:dispatch_afterGCD 一次性代码(只执行一次):dispatch_onceGCD 快速迭代方法:dispatch_applyGCD 队列组:dispatch_groupdi
2020-08-20 17:12:31 435
原创 iOS存储
沙盒iOS中每个应用程序都有一个独立的文件夹,这个文件夹就是沙盒。沙盒用来存储app的本地文件,例如:音频、视频、图片文件等。并且每个app的沙盒都是独立的,即当前app没有权限访问其他app的沙盒,所以说沙盒存储较之更安全。AppName.app 应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以不能在运行时对这个目录中的内容进行修改,否则会导致应用程序无法启动。Documents/ 保存应用程序的重要数据文件和用户数据文件等。用户数据基本上都放在这个位置(例如从网上下载的图片
2020-08-14 21:46:54 278
原创 iOS传值中的单例模式、代理模式
文章目录什么是单例模式类的创建锁的比较dispatch_once指针置nil正确的写法代理模式使用步骤协议在何处定义weak作用什么是单例模式这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。类的创建.m文件static KeepFreshManage *manageCustom;@implementation KeepFreshManage(instancetype) sharedL
2020-08-14 13:07:19 374
原创 KVC本质
文章目录什么是KVCAPIsetValueForKeyValueForKey传递nil处理非对象。KVC与容器类不可变有序容器可变有序容器触发KVO无序可变容器什么是KVCKVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性API-(void)setValue:(id)value forKeyPath:(NSString *)keyPath;-(void)setValue:(id)value forKey:(NSString *)key;-(id)v
2020-08-13 13:31:17 204
原创 观察者模式-KVO与通知
文章目录KVO是什么KVO是什么KVO: 全称 Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。如图所示,当被监听者的被监听内容发生变化时,会调用监听者的observeValueForKeyPath我们打个断点,看看添加kvo前后对象的变化。实例对象的isa指针指向父类,添加了观察者后,从Person变成了NSKVONotifying_Person.我们重写set方法,查看调用栈...
2020-08-12 09:10:16 299
原创 runtime详解(四)-category底层原理
文章目录简介分类和扩展Category本质写一个demo看看c++代码小结Category的加载过程_read_images方法attachCategoriesattachListsobjc::unattachedCategories.addForClass参考文章简介Category(分类) 是 Objective-C 2.0 添加的语言特性,主要作用是为已经存在的类添加方法。Category 可以做到在既不子类化,也不侵入一个类的源码的情况下,为原有的类添加新的方法,从而实现扩展一个类或者分离一个类
2020-08-06 10:03:07 315
原创 iOS消息转发的三次拯救
文章目录理解消息转发机制第一次拯救-动态方法解析第二次拯救-备援接收者第三次拯救-完整的消息转发理解消息转发机制在编译期间向类发送了其无法解读的消息并不会报错,因为在运行期可以继续向类中添加方法,所以编译期在编译时还无法通知类中到底会不会有某个方法实现。当对象接收到无法解读的消息后,就会启动“消息转发”机制,程序猿可以在此过程告诉对象应该如何处理消息。如果我们向某个对象发送了一条无法解读的消息,报错是这样的。unrecognized selector sent to instance消息转发分为
2020-08-05 14:09:10 391
原创 iOS属性关键字
文章目录属性的意义atomic和nonatomic什么是原子操作?程序的原子性是什么。回到OCatomic结论readWrite、readOnlyassign、retain、weak、strong、copy参考文章属性的意义属性的本质就是,实例变量+get+set方法众多属性关键字是对自动生成的get、set方法进行了修饰。atomic和nonatomic什么是原子操作?程序的原子性是什么。程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。比如张三给
2020-08-04 16:57:00 249
原创 autoreleasePool详解
文章目录从汇编看起转为cpp文件AutoreleasePoolPage结构自动释放池中的栈POOL_BOUNDARY(哨兵对象)objc_autoreleasePoolPush 方法autoreleaseFullPageautoreleaseNoPage(没有 hotPage)objc_autoreleasePoolPop 方法对象如何加入到自动释放池。自动释放池在何时释放从汇编看起我在main里什么也没写,只有一个空的@autorelase{}可以看到调用了俩个方法。转为cpp文件 /* @a
2020-08-04 10:22:58 722
原创 runloop应用
文章目录介绍runloopNSTimer 与 GCD Timer、CADisplayLinkNSTimerGCD TimerCADisplayLinkAutoreleasePool事件响应手势识别UI更新参考文章介绍runlooprunloop,它是一个对象,它和线程是一一对应的,每个线程都有一个对应的RunLoop对象,主线程的RunLoop会在程序启动时自动创建,子线程需要手动获取来创建。RunLoop运行的核心是一个do…while…循环,遍历所有需要处理的事件,如果有事件处理就让线程工作,没有
2020-08-03 15:08:37 396
原创 iOS底层原理-Runloop
文章目录线程和进程复习进程上下文线程Runloop的概念参考文章线程和进程复习摘录自《深入理解计算机系统》进程进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以运行多个进程,而每个进程都好像在独占地使用硬件。例如,运行一个c程序,操作系统会提供一种假象,就好像系统上只有这个程序运行。程序看上去是独占地使用处理器、主存、和I/o设备。处理器看上去就像在不间断地一条接一条的执行程序中的指令,即该程序的代码和数据是系统内存中唯一的对象。上下文操作系统保持跟踪进程运行所需的所有状态信息。这
2020-08-02 20:02:12 290
原创 runtime(三)消息传递中方法找寻的过程
目录从这行代码看起message.h汇编源码objc_msgSend调用栈lookUpImpOrForward源码1.无锁的缓存查找2.如果类没有实现(isRealized)或者初始化(isInitialized),实现或者初始化类3.加锁4.缓存以及当前类中方法的查找5.尝试查找父类的缓存以及方法列表6.没有找到实现,尝试方法解析器7.进行消息转发如果有了缓存参考资料从这行代码看起object hello] -> objc_msgSend(object, @selector(hello))众
2020-07-29 15:18:40 327
原创 iOS-runtime详解(二)weak底层原理
上次ARC的博客里涉及了__weak关键字,也简单了解了weak原理。这篇博客来具体探究weak的底层原理。查看汇编代码调用了initWeak、destroyWeak俩个方法先看这个initWeak方法* * Initialize a fresh weak pointer to some object location. * It would be used for code like: * * (The nil case) * __weak id weakPtr; * (
2020-07-24 23:14:34 487
原创 iOS内存布局
关于内存布局我们来验证一下。int a ;int b = 0;int main (void) { static int c = 0; int d; int e = 0; static int g; NSString *string = @"ads"; NSObject *f = [[NSObject alloc] init]; NSLog(@"未初始化的全局变量:%p", &a); NSLog(@"已初始化的全局变量:%p",
2020-07-22 20:08:13 114
原创 iOS-runtime详解(一)消息传递中的各种结构
文章目录理解消息传递。objc_msgSend的作用边界情况Self & SuperObject & Class & Meta ClasiSA详解小插曲,来看看什么是关联对象实例回到iSAISA()消息传递中如何找寻方法。Methodclass_data_bits_t bits;lldb打印验证class_ro_t *的结构realizeClassWithoutSwift小总结参考文章理解消息传递。objc_msgSend的作用在OC中对象调用方法,叫做传递消息。消息有name
2020-07-22 16:25:06 407
原创 iOSApp的启动过程简单了解和动态库的创建
一些名词mach-O哪些名词指的是Mach-OExecutable 可执行文件Dylib 动态库Bundle 无法被连接的动态库,只能通过dlopen()加载Image 指的是Executable,Dylib或者Bundle的一种,文中会多次使用Image这个名词。Framework 动态库和对应的头文件和资源文件的集合从dyld开始官网说明:用于Darwin / OS X的动态加载程序称为dyld,它负责加载进程所需的所有框架,动态库和包(插件)。什么是动态库:iOS为了节省空
2020-05-29 20:37:30 804
原创 读课设的java源码
老师已经把每个部分都分好了今天是读代码的一天,学iOS跑来读java也太累了。我们先看第一个ttms.dao,这里有一个叫StudioDao的类,这个类里有三个方法,select、update、delete。这是一个操作数据库的类。然后可以看到这个类继承了一个接口iStudioDao,这个iStudioDao在ttms.idao包里,就是一个普普通通的接口/** * */package xupt.se.ttms.idao;import xupt.se.ttms.model.Studio;
2020-05-15 21:49:09 401 2
原创 iOS高级编程Blocks笔记
一句话概括blocks带有局部变量的匿名函数什么是Blocks在整个程序中,一个变量总保持在一个内存区域。虽然多次调用函数,但变量的值总保持不变(局部变量)。下图出现了问题,全局变量 buttonId在for循环里的值被改变特别注意,c语言中不写参数意味着,参数的数量是不定的。因为这个函数是递归函数,buttonId又是全局变量,每次传入函数的buttonId都是同一个,导致but...
2020-04-25 19:32:45 368
原创 iOS之ARC规则
搞清楚一些名词内存泄漏:内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。ARC使用ARC时,引用计数其实还存在,释放和保留的操作由系统替我们完成,MRC下的 retain、release、autorelease、delloc这些方法无法调用。ARC管理内存时不是通过普通的消息派...
2020-03-22 19:50:25 226
原创 iOS-MRC内存管理
OC中的内存管理,也就是引用计数。对对象的操作有:生成并持有对象—alloc/new/copy/mutableCopy方法持有对象 ---------retain方法释放对象----------release方法废弃对象----------delloc方法内存管理方法不在OC语言中,而是在官方框架Cocoa中用于OS X、iOS开发中。内存管理的思考方式:自己生成并持有对象。...
2020-03-21 15:18:05 383
转载 macOS Catalina 10.15.1 文件已损坏,开启任何来源 无效解决方案(亲测有效)
macOS Catalina 10.15.1 文件已损坏,开启任何来源 无效解决方案(亲测有效)打开终端,在终端中粘贴下面命令:【sudo xattr -r -d com.apple.quarantine】 ,然后输入个空格,再将应用程序目录中的软件拖拽到命令后面,按回车后输入密码执行。比如:Sketch的命令是 sudo xattr -r -d com.apple.quarantine /A...
2020-03-11 19:40:56 514
原创 方法调配技术
此技术用于交换方法的实现,主要是为方法添加新的功能。1.对象包含一个isa指针,指向它的类。2.调用方法其实是给对象发送消息,实际为调用objc_msgSend方法,俩个重要参数,第一个为消息接收者(对象)第二个为选择子3.通过消息接收者的isa指针找到它所属的类。4.类是指向objc_class类型的结构体,该结构体中有方法列表结构体5.方法列表结构体里是存放方法的数组。6.方法是一...
2020-02-11 15:22:31 145
原创 iOS自定义类的深复制和浅复制
先说说系统的copy返回的对象是不可变的。mutableCopy返回的对象是可变的。[NSMutableString copy] 返回的字符串是不可修改的。[NSString mutableCopy]返回的字符串是可以修改的。正因如此,NSmutableString的copy和mutableCopy都是深复制copy 和mutableCopy返回的都是副本,副本修改,原件是不会跟着修改...
2020-02-02 20:39:11 352
空空如也
block代码转为c++后,为什么可以获取构造函数的地址
2020-04-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人