自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 iOS——图像显示原理以及UI流畅性优化方案

文章目录图像显示原理CPU和GPU分别干了哪些事CPU和GPU在具体的工作上都有哪些承担UI卡顿和掉帧的原因滑动优化方案前的准备知识FPS像素点如何出现到屏幕上渲染参与者像素相关知识合成过程对齐与不对齐滑动优化方案UIView的绘制原理异步绘制离频渲染什么是离屏渲染?何时会触发离屏渲染为何要避免离屏渲染?总结图像显示原理关于CPU和GPU都是由总线连接起来的,在CPU输出的往往是一个位图,上...

2019-11-16 19:15:21 1480

原创 iOS设计模式之——工厂方法模式和抽象工厂模式解析.md

文章目录工厂方法模式定义优点工厂方法模式的扩展在项目中应用抽象工厂模式定义优点缺点工厂方法与抽象工厂比较工厂方法模式定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。优点良好的封装性,代码结构清晰,降低模块间的耦合。扩展性很优秀。在增加产品类的情况下,只要适当地修改具体的工厂类或扩展一个工厂类,就可以完成“拥抱变化”。可以屏蔽产品类。...

2019-11-13 21:28:08 449

原创 面向对象设计的六大设计原则

文章目录六大设计原则通览单一职责原则定义优点实践里氏替换原则定义优点实践依赖倒置原则定义定义解读优点实践接口分离原则定义定义解读优点实践迪米特法则定义优点实践开闭原则定义定义的解读优点实践六大设计原则通览缩写英文名称中文名称SRPSingle Responsibility Principle单一职责原则OCPOpen Close Principle开闭原则...

2019-11-12 23:14:59 288

原创 “属性” VS “实例变量”

文章目录属性和实例变量间的关系属性 VS 实例变量的优缺点对比根据具体场景来决定声明实例变量还是属性属性和实例变量间的关系“属性”(property)是 Objective-C 的一项特性,用于封装对象中的数据。 Objective-C 对象通常会把所需要的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中,“获取方法”(getter)用于读取变量值,而“设置方法“(sett...

2019-10-13 18:11:21 336

原创 iOS开发:Blocks探究——底层实现

文章目录Blocks的实质准备工作:OC 转 C++ 源码方法Blocks 源码概览Block 结构体1. `struct __block_impl impl` 说明2. `struct __main_block_desc_0* Desc` 说明3. `__main_block_impl_0` 构造函数说明Block 实质总结截获自动变量值Blocks 内改写被截获变量的值的办法更改特殊区域变量值...

2019-09-18 23:11:17 231

原创 iOS开发:Blocks探究——基本用法

文章目录Block是什么Block的语法Block的语法格式Block类型的声明与赋值的使用Block与一般的C语言变量相似的使用Block在OC中的使用作为 typedef 声明类型Block是什么Block是带有自动变量的匿名函数。如字面意思,Block没有函数名,另外Block带有插入记号"^",插入记号便于查找到Block,后面跟的一个括号表示块所需要的一个参数列表。和函数一样,可以...

2019-09-14 16:25:52 366

原创 iOS——用GCD进行多线程编程

文章目录多线程编程GCD概要GCD任务和队列GCD 的使用步骤队列的创建方法任务的创建方法任务和队列不同组合方式的区别队列嵌套情况下,不同组合方式区别Dispatch Queuedispatch_queue_createMain Dispatch Queue / Global Dispatch Queuedispatch_set_target_queuedispatch_afterDispatch...

2019-09-14 16:00:20 186

转载 c/c++语言中反转字符串的函数strrev(), reverse()

1.使用string.h中的strrev函数#include<stdio.h>#include<string.h> int main(){ char s[]="hello"; strrev(s); puts(s); return 0;}strrev函数只对字符数组有效,对string类型是无效的。2.使用algo...

2019-08-20 12:26:30 315

转载 c++中map的用法

映射(map)特性:map自动按照key值按升序排列,key的值不能修改,可以修改value的值。没有重复元素m_map->first可以取得key值,m_map->second可以取得value值map 提供了"[]"运算符,使得 map可以像数组一样使用。事实上,map也称为“关联数组”。map的insert方法会忽略重复key,而不是替换key-value,键值对形...

2019-08-13 09:13:45 370 1

原创 runtime源码剖析—— 自动释放池

文章目录autoreleasepool究竟是什么AutoreleasePoolPage双向链表自动释放池中的栈POOL_BOUNDARY(哨兵对象)objc_autoreleasePoolPush 方法page->add 添加对象autoreleaseFullPage(当前 hotPage 已满)autoreleaseNoPage(没有 hotPage)objc_autoreleasePoo...

2019-08-08 15:05:30 359

原创 runtime源码剖析—— isa 是什么

引言如果你曾经对 ObjC 底层的实现有一定的了解,你应该会知道 Objective-C 对象都是 C 语言结构体,所有的对象都包含一个类型为 isa 的指针,那么你可能确实对 ObjC 的底层有所知,不过现在的 ObjC 对象的结构已经不是这样了。代替 isa 指针的是结构体 isa_t, 这个结构体中"包含"了当前对象指向的类的信息上面这段文字是引用“draveness”大神的话,因...

2019-08-07 21:49:25 262

转载 vector 的六种 创建和初始化方法

C++的初始化方法很多,各种初始化方法有一些不同。vector ilist1;默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。vector ilist2(ilist);vector ilist2 = ilist;两种方式等价 ,ilist...

2019-08-06 10:42:15 2639

原创 浅谈iOS中的事件处理和响应者链

文章目录引言触摸事件传递过程响应过程响应者链第一响应者 (The First Responder)引言在ios中,事件UIEvent类来表示,当一个事件发生时,系统会搜集的相关事件信息,创建一个UIEvent对象,最后将该事件转发给应用程序对象(UIApplication)。在 UIKit 中,UIApplication、UIView、UIViewController 这几个类都是直...

2019-08-05 21:43:04 281

原创 iOS内存管理——ARC篇

文章目录前言内存管理的思考方式所有权修饰符__strong 修饰符__weak修饰符__unsafe_unretained修饰符__autoreleasing修饰符ARC规则前言什么是ARC?ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 iOS5 中引入的内存管理机制.不仅能够降低程序崩溃和内存泄露的风险, 而且可以减少开...

2019-08-01 16:16:27 298

原创 OC枚举类型和字符串互转结合.pch文件的使用

前言需求:写项目时碰到一个必须用 switch case语句判断前端发送请求调用哪个函数的问题,但 switch case 语句不能判断字符串类型,这时就有了将字符串转为枚举值进行判断的想法再说说.pch文件:PrefixHeader.pch就是该项目的预编译头文件。.pch表示PreComplied Header,是一个工程要用到的来自于外部框架的头文件列表。Xcode将会首先会编译.pc...

2019-07-31 15:04:56 583

原创 属性关键字总结

属性关键字可以分为四类原子性这里指的是 nonatomic 和 atomic 关键字,详解可以参考我的另一篇博客从atomic关键字说到多线程安全读/写权限readwrite:其修饰的属性拥有“获取方法”(getter)与“设置方法”(setter)。readonly:其修饰的属性仅拥有获取方法。内存管理语义assign:是基本数据类型的默认属性关键字,简单赋值,不更改引...

2019-07-30 11:13:26 1020

原创 从atomic关键字说到多线程安全(内含iOS给代码加锁方法总结)

atomic是什么原子性:在默认情况下,由编译器所合成的方法会通过锁定机制确保其原子性(atomicity)。如果声明属性时不显式地声明nonatomic关键字,那这个属性就是“原子的”(atomic)。如果属性具备nonatomic特质,则不使用同步锁。atomic 和 nonatomic这对属性关键字是和线程安全挂钩的,虽然 atomic 属性关键字会给该 property 的 gett...

2019-07-30 09:40:45 1569

原创 信号量(Semaphore)和互斥锁(Mutex)的异同

相同点对于线程来说,信号量跟互斥锁是非常重要的概念,可以避免死锁或者读脏数据,然而两者区别也需要我们注意。不同点互斥锁(Mutex)保证了使用资源线程的唯一性和排他性,但是无法限制资源释放后其他线程申请的顺序问题,所以是无序的。而信号量(Semaphore)一般就是互斥的(少许情况读取是可以同时申请的),其保证了线程执行的有序性,可以理解为从一到多的进步,比如缓存区问题,可以有多个缓...

2019-07-29 17:18:53 2324

原创 iOS内存管理——引用计数与MRC篇

文章目录前言准备工作内存管理(引用计数)的理解对象操作与OC中方法的对应内存管理的思考方式:神奇的打印实验一些细节前言这部分内容我是拜读《iOS高级编程》过程中总结而成的,个人觉得这本书的作者确实很牛,在他当时苹果NSObject类的源码还没有公布时就根据Cocoa框架的互换框架GNUstep对苹果的实现推测的不离大谱。但就可惜就是出版时间太久了,其中很多源代码实现目前都改了,并且苹果已经公...

2019-07-27 21:55:22 265

原创 iOS获取设备和APP权限信息(内含plist文件的读写)

文章目录前言获取设备当前的各种信息获取APP能获取到的权限信息(内含plist文件的读写)前言下面各种获取到的信息分为了两大类,一种是获取APP载体设备当前的各种信息,另一种是APP自身能取得的权限,两部分中的“说在前面的”只是记录了一个我的学习过程,所有调取代码都在示例代码或者demo里,可跳过这部分自取代码这是我的demo地址 GitHub,我将其封装成了一个工具类,欢迎clon...

2019-07-23 21:36:09 2845

转载 iOS-MRC与ARC区别以及五大内存区

个人觉得要更加深入直观了解MRC与ARC的区别建议先从内存分析开始所以文章开始会从内存说起文章目录五大内存区域1.1 栈区1.2 堆区1.3 全局区1.4 常量区1.5 代码区1.6 自由存储区1.7 static静态变量1.8 extern全局变量1.9 const常量属性标识符2.1 @property、@synthesize、@dynamic2.2...

2019-07-23 10:56:24 299

原创 操作系统引论

文章目录操作系统概述操作系统的发展过程操作系统的基本特性操作系统的主要功能操作系统概述操作系统的定义:OS是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。OS是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充操作系统的目标:方便性有效性可扩充性开放性;操作系统的作用:OS作为用户与计算机硬件系统之间的接口OS作为计算机系统...

2019-07-09 16:45:49 104

原创 Git 忽略提交 .gitignore

添加 .gitignore 配置文件在我们平时使用 Git 进行版本管理的时候,上传代码时常常会将 Finder 用来存储这个文件夹的显示属性的.DS_Store 文件上传到GitHub上去,这样在合作开发时很不方便,那么如何忽略追踪这些没有用到文件呢?这时,我们会通过创建一个 .gitignore 配置文件,写入特定规则,来指定 Git 忽略追踪某个目录或文件,不将其纳入版本管理,减少线上代...

2019-06-20 15:32:56 326

原创 iOS 录音计时类似于秒表计时器的实现

功能简介:按下录音按钮开始计时,松开按钮停止计时(按下按钮时长未满1秒复位,),点击发布按钮复位实现效果图先创建一个处理录音功能的工具类,其中包含 AVFoundation 框架中的 AVAudioRecorder 类,还有判断录音时长是否满一秒的跳转flag值,还有按下按钮和松开按钮两个事件需要执行的方法。#import <Foundation/Foundation.h>...

2019-06-02 17:05:12 1073

原创 iOS "NSURLConnection finished with error - code -1022" 错误解决

问题在访问一个接口时网络返回error,返回错误码Code = -1022.原因这是因为iOS9以后,需要APP的网络协议里面都必须使用https协议!这与接口中的http不兼容解决在工程的plist文件中,新增一个属性1.字典 NSAppTransportSecurity2.在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boo...

2019-06-02 15:59:48 4014

转载 git错误整理——Git error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54

错误1:Git: fatal: The remote end hung up unexpectedly解决办法:git config --global http.postBuffer 1048576000git config --global http.postBuffer 1048576000错误2:Git error: RPC failed; curl 56 LibreSSL SS...

2019-05-19 21:22:46 41637

转载 Xcode10 #import 不提示头文件

Xcode --> File --> Workspace Settings --> Build System --> Legacy Build System引用自这里

2019-05-19 21:14:51 155

转载 C++11之for循环的新用法

转载自:https://www.cnblogs.com/jiayayao/p/6138974.htmlC++使用如下方法遍历一个容器:#include "stdafx.h"#include<iostream>#include<vector>int main(){ std::vector<int> arr; arr.push_bac...

2019-05-07 17:08:33 271

原创 git错误记录:git-lfs filter-process: git-lfs: command not found

参考文章The Git init & fetch approach breaks Git LFS问题描述在pull远程主分支代码时,因为合作开发的伙伴上传了个静态库,大文件拉取不下来,出现了git-lfs filter-process: git-lfs: command not foundfatal: The remote end hung up unexpectedly...

2019-05-05 21:54:57 26420

原创 解决拉取远程分支后出现.xcodeproj Couldn't load project的问题

问题拉取远程分支后与本地仓库出现冲突导致工程文件打不开解决方案找到项目的. xcodeproj文件,显示包内容,找到project.pbxproj文件,修改冲突。解决冲突方式可参考我之前的一篇博客:添加解决git stash pop后或者合作开发远程拉取主分支后Xcode中Info.plist的冲突链接描述...

2019-04-21 00:32:53 2498

原创 操作系统学习笔记——进程的描述和状态

进程的定义一个具有一定独立功能的程序在一个数据集合上单一次动态执行过程。进程的组成程序的代码;程序处理的数据;程序计数器中的值,指示下一条将运行的指令;一组通用的寄存器的当前值,堆、栈;一组系统资源(如打开的文件);总之,进程包含了正在运行的一个程序的所有状态信息。进程与程序的联系程序是产生进程的基础;程序的每次运行构成不同的进程;进程是程序功能的体现;通过...

2019-04-14 15:56:40 1030

原创 详解iOS开发中复制对象

引语用简单的赋值语句将对象赋值给另一个对象时发生的情况:Object x, y;x = objectA;x = y;x.name = objectB.name;在这段代码块执行结束后,打印x和y的name属性,会发现它们存储的对象都是objectC.name。这是因为这样赋值的结果仅仅是将对象y的地址复制到x中,在赋值操作结束时,两个变量都指向内存中的同一个地址。copy和mu...

2019-04-06 16:22:24 810

转载 C++string中用于查找的find系列函数浅析

转自博客C++string中用于查找的find系列函数浅析

2019-04-02 11:52:52 140

转载 getline()函数用法

转自getline()函数详解学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下:int main(){ string line: while(getline(cin,line)) cout<<line<<endl; ...

2019-04-01 17:45:48 272

转载 解决git stash pop后或者合作开发远程拉取主分支后Xcode中Info.plist的冲突

转自:解决git stash pop后Xcode中Info.plist的冲突:The data couldn’t be read because it isn’t in the correct format去Xcode中尝试打开info.plist,结果打不开:The data couldn’t be read because it isn’t in the correct format....

2019-02-25 00:06:48 1487

原创 Effective Objective-C 2.0 阅读笔记 (二)

理解“属性”这一概念“属性”(property)是Objective-C的一项特性,用于封装对象中的数据。编译器会把“点语法”转换为对存取方法的调用,使用“点语法”的效果与直接调用存取方法相同。因此使用点语法和直接调用存取方法之间没有丝毫差别。 NSString *lastName = aPerson.lastName; //Same as: NSString *lastNam...

2019-02-18 14:10:22 99

原创 iOS 代码处理子视图(移除、隐藏等功能)

移除所有子视图[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];显示、隐藏所有子视图//隐藏所有子视图[view.subviews makeObjectsPerformSelector:@selector(setHidden:) withObject:@YES];//显示所有子视图[v...

2019-02-01 21:12:36 1493

原创 Effective Objective-C 2.0 阅读笔记 (一)

Objective-C语言的特性OC和其他面向对象语言的关键区别在于:使用消息结构的语言,其运行时所执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。采用消息结构的语言,无论是否多态,总是在运行时才会去查找所要执行的方法。Objectiv-C的重要工作都由“运行期组件”(runtime component)而非编译器来完成,运行器组件本质上就是一种与开发者所编代码相链接的“动...

2019-01-31 12:05:16 110

原创 初次github合作开发时遇到的坑

前言寒假开始了自己的第一个项目,同时也是自己第一次开始合作开发,git上传代码时走了不少弯路,在此将这些坑记录下来。参考博客git提交时报错:Updates were rejected because the tip of your current branch is behind记Git报错-refusing to merge unrelated histories切记首先我们...

2019-01-19 17:48:01 953

原创 利用FMDB存储图片类型的数据

参考博客SQL数据类型UIImage转NSData和NSData转UIImage实现方法在利用FMDB写知乎日报的缓存功能时,首页需要将每条新闻的标题和图片缓存下来,以便没网时也能加载出数据不至于崩。标题缓存很简单,直接存入建好的数据库的表中就好。至于图片,可以直接调用SDWebImage的[self.mainView.tableViewCell.rightImageView ...

2018-12-23 19:49:06 1348 2

空空如也

空空如也

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

TA关注的人

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