自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 问答 (1)
  • 收藏
  • 关注

原创 3 Linux目录管理

注意:在下面的讲解中,每个命令都有很多的参数说明(选项),我们只讲其中的几个,关键是让学生掌握命令的语法;学生学习完语法后,就可以自己按照参数书写各种命令,这也是我们最终的目的。常用命令,我们在企业级开发过程中,经常书写的命令。会非常被容易记住,不常用的命令,只要我们学习完了语法之后,在去查找参数手册,会非常容易的解决我们的问题,所以,每个命令不是建立在死记硬背的基础上的,要理解语法+查找参数...

2022-04-17 21:10:50 94

原创 Linux系统与设置命令

2 系统与设置命令在前面的两个章节中,我们主要介绍了Linux基本知识和虚拟机的安装,从当前章节开始,我们一起学习下Linux的基本命令,在当前章节,我们先简单的学习下一些系统的基本命令,慢慢的由浅入深,在后面的章节中我们将学习其他的命令比如文件操作、备份压缩等2.1 学习命令的原因命令我们可以理解成在Windows中我们常常为了查看ip输入的ipconfig,在Linux中也有很多的命令,...

2022-04-17 20:34:35 142

原创 SQL语言

1. 什么是SQL?SQL(structured query language):结构化查询语言SQL是一种对关系型数据库中的数据进行定义和操作的语言SQL语言简洁,语法简单,好学好用什么是SQL语句使用SQL语言编写出来的句子\代码,就是SQL语句在程序运行过程中,要想操作(增删改查,CRUD)数据库中的数据,必须使用SQL语句Create , Retrive, Update,...

2022-02-26 16:23:56 60

原创 4. iOS面试题原理篇2

lldb(gdb)常用的调试命令?po:打印对象,会调用对象description方法。是print-object的简写expr:可以在调试时动态执行指定表达式,并将结果打印出来,很有用的命令print:也是打印命令,需要指定类型bt:打印调用堆栈,是thread backtrace的简写,加all可打印所有thread的堆栈br l:是breakpoint list的简写BA...

2020-12-02 11:00:41 49

原创 3. iOS面试题原理篇1

runtime怎么添加属性、方法等ivar表示成员变量class_addIvarclass_addMethodclass_addPropertyclass_addProtocolclass_replaceProperty是否可以把比较耗时的操作放在NSNotificationCenter中首先必须明确通知在哪个线程中发出,那么处理接受到通知的方法也在这个线程中调用如果在...

2020-11-27 09:04:04 49

原创 2. iOS面试题UI篇

Size Classes 具体使用对屏幕进行分类UIView和CALayer是什么关系?UIView显示在屏幕上归功于CALayer,通过调用drawRect方法来渲染自身的内容,调节CALayer属性可以调整UIView的外观,UIView继承自UIResponder,比起CALayer可以响应用户事件,Xcode6之后可以方便的通过视图调试功能查看图层之间的关系UIView...

2020-11-25 21:43:31 54

原创 性能优化09-安装包瘦身

开发完之后,经过编译打包上传到APPStore最终是要生成一个ipa文件Xcode中有一个app文件app文件项目中所有的代码资源都在这个文件里面,最终都会打包成一个ipa文件,项目开发到一定程度,这个安装包会越来越大,就会造成提交上传和用户下载的速度越来越慢,一般都会采取一定的方法减小安装包的大小,安装包(IPA)主要由可执行文件、资源组成资源(图片、音频、视频等)采取...

2020-11-24 10:18:21 27

原创 性能优化07-启动优化

01冷启动简介启动时间就是点击app图标到app将数据显示到屏幕上面的时间APP的启动可以分为2种冷启动(Cold Launch):从零开始启动APP热启动(Warm Launch):APP已经在内存中,在后台存活着,再次点击图标启动APPAPP启动时间的优化,主要是针对冷启动进行优化通过添加环境变量可以打印出APP的启动时间分析(Edit scheme -> Run -&g...

2020-11-24 10:18:13 36

原创 性能优化CPU和GPU

在屏幕成像的过程中,CPU和GPU起着至关重要的作用CPU(Central Processing Unit,中央处理器)对象的创建(alloc init)和销毁、对象属性的调整、布局计算(frame)、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)CPU主要负责计算,用什么颜色,大小,将算好的数据传给GPUGPU(Graphics Processing...

2020-11-15 20:17:17 59

原创 内存管理autorelease

自动释放是在什么时候释放的在MRC环境下,释放对象有两种方式一种是创建完对象调用autorelease,或者是手动release。为了方便使用对象,一般情况下都是调用autorelease。要想查看到调用了autorelease的对象什么时候会被释放,就要先研究一下,autoreleasepool,表面上看是在autoreleasepool的大括号结束的时候,就释放了对象。将代码转成CPP文件...

2020-11-15 20:17:12 32

原创 内存管理weak指针的原理

weak指针的实现原理当他指向的对象销毁之后,会将这个指针指向nil,这样就避免产生野指针的错误,他是如何办到的呢,他会把当前对象的弱引用都存放到一个表中,当这个对象被销毁的时候他会将表里面对象删除,并且把引用计数清空我们可以查看dealloc 的源码,源码source里面的NSObject类, 当一个对象要释放时,会自动调用dealloc,接下的调用轨迹是dealloc_objc_ro...

2020-11-13 20:06:41 48

原创 内存管理-引用计数的存储

当一个对象创建出来的时候,他的引用计数是1,当使用这个对象的时候要对这个对象的引用计数+1,使用结束之后要进行-1;那么这个对象的引用计数,一开始放在什么地方在64bit中,引用计数可以直接存储在优化过的isa指针中,也可能存储在SideTable类中从arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,还使用位域来存储更多的信息isa结构extra_...

2020-11-13 20:06:36 64

原创 内存管理copy

01copy的目的就是为了产生一个新的副本对象,修改副本对象,不会对影响原来的对象IOS提供了两个拷贝方法,copy不可变拷贝,产生不可变的副本2.mutablecCopy,产生可变的副本NSMutableString *testStr = [NSMutableString stringWithFormat:@"ddd"]; NSString *str2 = [te...

2020-11-12 20:20:36 34

原创 多线程-读写安全

多线程31-读写安全01-简介文件操作(IO操作)读取文件往文件中写入内容不能允许读取和写入同时进行我们之前做的加锁那种操作,平时开发中有点缺陷我们最好让读的操作可以多条线程一起读取多读单写,多线程出乱主要是因为有写的操作如果去掉读的锁,就无法保证读和写分开操作,思考如何实现以下场景同一时间,只能有1个线程进行写的操作同一时间,允许有多个线程进行读的操作同一时间,不允许既有写...

2020-11-11 17:05:00 55

原创 多线程 线程安全

多线程的安全隐患我们用多线程有很多好处,但是也存在安全隐患资源共享1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源比如多个线程访问同一个对象、同一个变量、同一个文件当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题例子多线程卖票的- (void)saleTickets{ self.tickets = 100; dispatch_async(...

2020-11-11 17:04:54 59

原创 内存管理-Tagged%20Pointer

01从64bit开始,iOS引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储在没有使用Tagged Pointer之前, NSNumber等对象需要动态分配内存、维护引用计数等,NSNumber指针存储的是堆中NSNumber对象的地址值,没有使用TaggetPointer之前存储一个10就要开辟一块独立的空间,然后使用一个指针变...

2020-11-10 10:46:41 44

原创 多线程-GCD

01基本概念iOS的多线程方案有哪几种?你更倾向于哪一种?方案他们底层其实都是依赖于pthread,更倾向于GCDGCD常用函数GCD中有2个用来执行任务的函数用同步的方式执行任务dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);queue:队列block:任务用异步的方式执行任务di...

2020-11-09 10:09:16 44

原创 RunLoop

01基本认识什么是RunLoop顾名思义运行循环在程序运行过程中循环做一些事情当我一启动IOS程序的时候,他内部就会创建一个RunLoop对象,循环做一些事情应用范畴定时器(Timer)、PerformSelectorGCD Async Main Queue事件响应、手势识别、界面刷新网络请求AutoreleasePool如果没有RunLoop程序执行完main函数...

2020-10-30 09:15:49 34

原创 Block循环引用

循环引用01Person *p = [[Person alloc] init]; p.age = 19; p.block = ^{ NSLog(@"%i",p.age); };上面的代码即使对象过了作用域也不会被销毁,因为两个强引用问题,互相强引用,导致双方都无妨释放。block和person之间的引用图...

2020-10-28 09:18:11 28

原创 __block-内存管理

我们创建一个对象如果我们block内部用到了__block类型的变量,他会拥有这个对象,我们可以通过cpp文件来分析。一旦访问对象,desc结构体里面就会多两个成员,一个是copy 和dispose,他会对对这个变量进行内存管理。block会对__block变量直接产生强力用类似于我们之前访问对象类型的变量,但是对象类型的变量block会根据我们访问对象的引用是强引用还是弱引用对他产生相应的引用。...

2020-10-28 09:18:02 40

原创 Runtime-方法

01class的结构元类对象和元类的结构是一样的,他是一种特殊的类对象struct objc_class : objc_object { // Class ISA; isa_t isa; Class superclass; cache_t cache; // formerly cache pointer and vtable方法缓存 ...

2020-10-26 10:29:10 23

原创 Runtime-isa-共用体

01-简介很多机制都是基于runtime来实现的Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同,很多编程语言编写代码->编译链接->运行,编译完成之后的二进制代码就是我们要执行的代码,编译结果和运行结果是一样的。OC可以在运行的过程中修改我们编译完成的代码,Objective-C的动态性是由Runtime API来支撑的Runtime ...

2020-10-25 14:15:22 31

原创 Runtime-objc_msgSend

01objc_msgSendOC中的方法调用,就是给方法的调用着发送消息,其实都是转换为objc_msgSend函数的调用objc_msgSend的执行流程可以分为3大阶段消息发送:给消息的接受者receiver,发送后面的那个消息,会在这个接管尝试找到这个方法然后调用,然后找到就调用成功。如果成功就不会进入后面的两步了动态方法解析:如果消息发动阶段找不到对应的方法,就会进入这个阶段,允许开...

2020-10-25 14:15:14 32

原创 KVC

01基本使用通过KVC修改属性会触发KVO么?会触发KVOKVC的赋值和取值过程是怎样的?原理是什么?KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性常见的API有- (void)setValue:(id)value forKeyPath:(NSString *)keyPath; - (void)setValue:(id)val...

2020-10-24 10:12:16 26

原创 Block

01基本认识block的原理是怎样的?本质是什么?block本质上也是一个OC对象,它内部也有个isa指针block是封装了函数调用以及函数调用环境的OC对象封装了函数调用以及调用环境的OC对象__block的作用是什么?有什么使用注意点?block的属性修饰词为什么是copy?使用block有哪些使用注意?block一旦没有进行copy操作,就不会在堆上使用注意:循环引...

2020-10-23 09:20:06 22

原创 Category-关联对象

分类添加属性struct category_t { const char *name; classref_t cls; struct method_list_t *instanceMethods; struct method_list_t *classMethods; struct protocol_list_t *protocols; struc...

2020-10-22 11:38:46 23

原创 KVO

基本使用iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. P...

2020-10-20 22:11:38 32

原创 isa和superclass

01isa三种对象在内存中的结构,他们之间肯定是有联系的截屏2020-10-19下午8.36.36.png我们在调用方法的时候本质上是发消息,给这个对象发消息。而对象方法存在类对象中,类方法存在元类对象中,所以他们之间使用了isa来进行连接instance的isa指向class当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用cla...

2020-10-20 16:46:49 24

原创 OC对象的分类

01-instance对象Objective-C中的对象,简称OC对象,主要可以分为3种instance对象(实例对象)class对象(类对象)meta-class对象(元类对象)instance对象就是通过类alloc出来的对象,每次调用alloc都会产生新的instance对象NSObject *object1 = [[NSObject alloc] init]; ...

2020-10-19 20:31:58 25

原创 OC对象的本质

OC和C_C++OC和C_C++一个NSObject对象占多少内存NSObject *person = [[NSObject alloc] init];也就是说person指针指向的这段内存空间,占有多少内存空间?要想知道他在内存中占有多少空间,就要知道他在内存是怎么布局的,在内存中包含哪些内容,搞清楚这段代码的本质是什么,我们平时编写的OC代码,底层实现其实都是C\C++代码,...

2020-10-18 20:56:33 25

原创 IOS 蓝牙技术之CoreBluetooth

蓝牙常见名称和缩写BLE:(Bluetooth low energy)蓝牙4.0设备因为低耗电,也叫BLEperipheral,central:外设和中心设备,发起链接的是central(一般是指手机),被链接的设备是peripheral(运动手环),也可两个手机,一个座位外设一个作为中心设备service and characteristic:(服务和特征)每个设备会提供服务和特征,类似...

2020-08-15 19:50:01 40

原创 IOS 创建CocoaPods远程私有代码库和公开库

https://guides.cocoapods.org官网有些时候我们的项目太过于庞大,需要进行组建化开发,可以将每个模块开发成一个组件。或者是我们的一些自己库,想用pod导入,又不想使用本地路径的方式。这时候我们就可以做一个远程的私有代码仓库,这样我们开发的库就可以满足我们自己用pod进行导入,又不用让别人看到;因为索引库中之存放框架的描述信息,真正的框架是存放在描述信息制定的地址之中,所...

2020-08-12 18:44:00 96

原创 UISplitViewController 的使用

分割视图控制器可以实现iPad屏幕下的分屏(左右)splitViewController会自适应iPad横竖屏下的布局可以设置当竖屏状态下, 隐藏masterViewController使用方法:创建分割控制器设置分割控制器viewControllers属性此属性是一个数组, 里面存放两个子控制器第0个子控制器代表masterViewController第1子个控制...

2020-06-10 09:51:37 56

原创 IOS 内存分析 Xcode

主要目的就是为了检测程序是否存在内存泄露MRC target -> build setting -> 搜索 automatic reference counting截屏2020-06-01下午4.32.53.png1. 静态内存分析(Analyze)概念:静态内存分析是不运行程序,直接对代码进行分析.根据代码的上下文的语法结构,来分析内存状况作用:...

2020-06-02 13:31:53 56

原创 IOS 静态库.a 和.framework

1.静态库的简介什么是库?库是程序代码的集合,是共享程序代码的一种方式根据源代码的公开情况,库可以分为2种类型开源库公开源代码,能看到具体实现比如SDWebImage、AFNetworking闭源库不公开源代码,是经过编译后的二进制文件,看不到具体实现主要分为:静态库、动态库静态库和动态库静态库和动态库的存在形式静态库:.a 和 .framework动态库:...

2020-06-01 16:14:13 33

原创 IOS 应用程序互相跳转

1. 应用场景使用第三方用户登录,需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名"应用程序推广,网易彩票,设置-推荐应用-有很多应用程序图标-如果本机已经安装过,会直接跳转到另外一个应用程序-软件的广告,推广结果,后续会有一些列的金钱上的结算支付宝,第三方支付,淘宝,电话费充值。。。2. 要打开本机上的其他应用程序,需要设置schemes,自定义的协议头,可以打开其他...

2020-05-28 23:17:43 35

原创 IOS真机调试相关

1. 什么是真机调试?简单理解就是将App项目运行到真机上进行测试.APP发布之前一定要做真机调试!!!2. 为什么要运行到真机上, 不是可以运行到模拟器上吗?真机和模拟器环境的差异> 内存环境,网络环境;> 传感器: 磁力计,陀螺仪,距离传感器等;> 特定功能:拍照, 打电话,发短信,蓝牙等。> 用户体验不一样3. 怎样做真机调试?Xcode7.0之前...

2020-05-28 09:51:25 33

原创 IOS 发布app到AppStore

什么是程序发布?就是指将APP发布到AppStore, 供指定区域用户下载程序发布的步骤?限制人必须拥有Apple ID([https://appleid.apple.com])加入开发者计划,升级为开发者账号([https://developer.apple.com])2 . 限制电脑重新配置一个发布证书需要使用需要程序发布的电脑,生成CSR文件CSR文件: 证书...

2020-05-28 09:51:19 20

原创 IOS打包测试

什么是打包测试?就是指将项目打包成为.ipa的压缩包, 供指定设备安装测试.为什么要做打包测试?当进入到测试阶段, 需要专门的测试人员对APP进行测试, 此时需要将APP安装到测试人员的测试设备上, 此时最佳的方案, 就是直接将项目打包成为.ipa包, 供测试人员下载测试;怎样进行打包测试?限制人必须拥有Apple ID([https://appleid.apple.com]...

2020-05-28 09:51:15 30

原创 IOS 传感器

什么是传感器传感器是一种感应\检测装置, 目前已经广泛应用于智能手机上传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样iPhone中的下面现象都是由传感器完成的在地图应用中, 能判断出手机头面向的方向一关灯, iPhone会自动降低亮度让屏幕显得不是那么刺眼打电话时, 人脸贴近iPhone屏幕时, 屏幕会自动锁屏, 达到省电的目的传感器的类型iP...

2020-05-27 20:39:44 47

空空如也

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

TA关注的人

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