iOS
文章平均质量分 71
咚个里个呛
GitHub链接:https://github.com/PaulZhe
展开
-
iOS——图像显示原理以及UI流畅性优化方案
文章目录图像显示原理CPU和GPU分别干了哪些事CPU和GPU在具体的工作上都有哪些承担UI卡顿和掉帧的原因滑动优化方案前的准备知识FPS像素点如何出现到屏幕上渲染参与者像素相关知识合成过程对齐与不对齐滑动优化方案UIView的绘制原理异步绘制离频渲染什么是离屏渲染?何时会触发离屏渲染为何要避免离屏渲染?总结图像显示原理关于CPU和GPU都是由总线连接起来的,在CPU输出的往往是一个位图,上...原创 2019-11-16 19:15:21 · 1742 阅读 · 0 评论 -
iOS设计模式之——工厂方法模式和抽象工厂模式解析.md
文章目录工厂方法模式定义优点工厂方法模式的扩展在项目中应用抽象工厂模式定义优点缺点工厂方法与抽象工厂比较工厂方法模式定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。优点良好的封装性,代码结构清晰,降低模块间的耦合。扩展性很优秀。在增加产品类的情况下,只要适当地修改具体的工厂类或扩展一个工厂类,就可以完成“拥抱变化”。可以屏蔽产品类。...原创 2019-11-13 21:28:08 · 679 阅读 · 0 评论 -
面向对象设计的六大设计原则
文章目录六大设计原则通览单一职责原则定义优点实践里氏替换原则定义优点实践依赖倒置原则定义定义解读优点实践接口分离原则定义定义解读优点实践迪米特法则定义优点实践开闭原则定义定义的解读优点实践六大设计原则通览缩写英文名称中文名称SRPSingle Responsibility Principle单一职责原则OCPOpen Close Principle开闭原则...原创 2019-11-12 23:14:59 · 748 阅读 · 0 评论 -
“属性” VS “实例变量”
文章目录属性和实例变量间的关系属性 VS 实例变量的优缺点对比根据具体场景来决定声明实例变量还是属性属性和实例变量间的关系“属性”(property)是 Objective-C 的一项特性,用于封装对象中的数据。 Objective-C 对象通常会把所需要的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中,“获取方法”(getter)用于读取变量值,而“设置方法“(sett...原创 2019-10-13 18:11:21 · 415 阅读 · 0 评论 -
iOS内存管理——引用计数与MRC篇
文章目录前言准备工作内存管理(引用计数)的理解对象操作与OC中方法的对应内存管理的思考方式:神奇的打印实验一些细节前言这部分内容我是拜读《iOS高级编程》过程中总结而成的,个人觉得这本书的作者确实很牛,在他当时苹果NSObject类的源码还没有公布时就根据Cocoa框架的互换框架GNUstep对苹果的实现推测的不离大谱。但就可惜就是出版时间太久了,其中很多源代码实现目前都改了,并且苹果已经公...原创 2019-07-27 21:55:22 · 361 阅读 · 0 评论 -
iOS内存管理——ARC篇
文章目录前言内存管理的思考方式所有权修饰符__strong 修饰符__weak修饰符__unsafe_unretained修饰符__autoreleasing修饰符ARC规则前言什么是ARC?ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 iOS5 中引入的内存管理机制.不仅能够降低程序崩溃和内存泄露的风险, 而且可以减少开...原创 2019-08-01 16:16:27 · 532 阅读 · 0 评论 -
浅谈iOS中的事件处理和响应者链
文章目录引言触摸事件传递过程响应过程响应者链第一响应者 (The First Responder)引言在ios中,事件UIEvent类来表示,当一个事件发生时,系统会搜集的相关事件信息,创建一个UIEvent对象,最后将该事件转发给应用程序对象(UIApplication)。在 UIKit 中,UIApplication、UIView、UIViewController 这几个类都是直...原创 2019-08-05 21:43:04 · 461 阅读 · 0 评论 -
runtime源码剖析—— 自动释放池
文章目录autoreleasepool究竟是什么AutoreleasePoolPage双向链表自动释放池中的栈POOL_BOUNDARY(哨兵对象)objc_autoreleasePoolPush 方法page->add 添加对象autoreleaseFullPage(当前 hotPage 已满)autoreleaseNoPage(没有 hotPage)objc_autoreleasePoo...原创 2019-08-08 15:05:30 · 378 阅读 · 0 评论 -
runtime源码剖析—— isa 是什么
引言如果你曾经对 ObjC 底层的实现有一定的了解,你应该会知道 Objective-C 对象都是 C 语言结构体,所有的对象都包含一个类型为 isa 的指针,那么你可能确实对 ObjC 的底层有所知,不过现在的 ObjC 对象的结构已经不是这样了。代替 isa 指针的是结构体 isa_t, 这个结构体中"包含"了当前对象指向的类的信息上面这段文字是引用“draveness”大神的话,因...原创 2019-08-07 21:49:25 · 512 阅读 · 0 评论 -
iOS——用GCD进行多线程编程
文章目录多线程编程GCD概要GCD任务和队列GCD 的使用步骤队列的创建方法任务的创建方法任务和队列不同组合方式的区别队列嵌套情况下,不同组合方式区别Dispatch Queuedispatch_queue_createMain Dispatch Queue / Global Dispatch Queuedispatch_set_target_queuedispatch_afterDispatch...原创 2019-09-14 16:00:20 · 222 阅读 · 0 评论 -
iOS开发:Blocks探究——基本用法
文章目录Block是什么Block的语法Block的语法格式Block类型的声明与赋值的使用Block与一般的C语言变量相似的使用Block在OC中的使用作为 typedef 声明类型Block是什么Block是带有自动变量的匿名函数。如字面意思,Block没有函数名,另外Block带有插入记号"^",插入记号便于查找到Block,后面跟的一个括号表示块所需要的一个参数列表。和函数一样,可以...原创 2019-09-14 16:25:52 · 571 阅读 · 0 评论 -
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 · 438 阅读 · 0 评论 -
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 · 329 阅读 · 0 评论 -
OC枚举类型和字符串互转结合.pch文件的使用
前言需求:写项目时碰到一个必须用 switch case语句判断前端发送请求调用哪个函数的问题,但 switch case 语句不能判断字符串类型,这时就有了将字符串转为枚举值进行判断的想法再说说.pch文件:PrefixHeader.pch就是该项目的预编译头文件。.pch表示PreComplied Header,是一个工程要用到的来自于外部框架的头文件列表。Xcode将会首先会编译.pc...原创 2019-07-31 15:04:56 · 610 阅读 · 0 评论 -
属性关键字总结
属性关键字可以分为四类原子性这里指的是 nonatomic 和 atomic 关键字,详解可以参考我的另一篇博客从atomic关键字说到多线程安全读/写权限readwrite:其修饰的属性拥有“获取方法”(getter)与“设置方法”(setter)。readonly:其修饰的属性仅拥有获取方法。内存管理语义assign:是基本数据类型的默认属性关键字,简单赋值,不更改引...原创 2019-07-30 11:13:26 · 1186 阅读 · 0 评论 -
iOS 知乎日报评论分组展开效果实现
参考博客CGAffineTransformMakeTranslation和CGAffineTransformTranslatetableView.contentOffset.yUITableView 移动到指定的区头位置在仿写知乎日报评论界面时遇到了评论分组展开的需求,如下图:解决思路1. 点击section头视图跳转到指定section刚开始我想用CGAffineTransf...原创 2018-12-09 15:46:45 · 2317 阅读 · 1 评论 -
UIButton自定义图片文字位置
参考博客iOS图片的填充方式UIImageView(contentMode)有什么不同如何设置button的图片与文字位置最近遇到了需要自定义button来设置它的图片文字相应区域位置的需求,话不多说,核心代码如下,关于代码中图片的填充方式可以看看上面的原创 2018-12-09 16:10:25 · 1112 阅读 · 0 评论 -
iOS 回复内容展开效果实现
参考博客iOS开发~设置label上文字显示不同大小、颜色、字体类型UILabel自动计算行高 并且 最多显示n行iOS-UITableViewCell自适应高度最优雅的方法实现效果以知乎日报为例,评论回复初始只能预览两行内容,在点击展开按钮改变cell高度将回复内容全部展示出来。实现思路这里我采用的cell自适应高度方法是参考博客3博主推荐的方法,可能下面的展开实现方法并不适...原创 2018-12-09 17:07:20 · 1747 阅读 · 1 评论 -
利用FMDB存储图片类型的数据
参考博客SQL数据类型UIImage转NSData和NSData转UIImage实现方法在利用FMDB写知乎日报的缓存功能时,首页需要将每条新闻的标题和图片缓存下来,以便没网时也能加载出数据不至于崩。标题缓存很简单,直接存入建好的数据库的表中就好。至于图片,可以直接调用SDWebImage的[self.mainView.tableViewCell.rightImageView ...原创 2018-12-23 19:49:06 · 1390 阅读 · 2 评论 -
iOS 代码处理子视图(移除、隐藏等功能)
移除所有子视图[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];显示、隐藏所有子视图//隐藏所有子视图[view.subviews makeObjectsPerformSelector:@selector(setHidden:) withObject:@YES];//显示所有子视图[v...原创 2019-02-01 21:12:36 · 1554 阅读 · 0 评论 -
Effective Objective-C 2.0 阅读笔记 (二)
理解“属性”这一概念“属性”(property)是Objective-C的一项特性,用于封装对象中的数据。编译器会把“点语法”转换为对存取方法的调用,使用“点语法”的效果与直接调用存取方法相同。因此使用点语法和直接调用存取方法之间没有丝毫差别。 NSString *lastName = aPerson.lastName; //Same as: NSString *lastNam...原创 2019-02-18 14:10:22 · 115 阅读 · 0 评论 -
详解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 · 834 阅读 · 0 评论 -
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 · 4126 阅读 · 0 评论 -
iOS 录音计时类似于秒表计时器的实现
功能简介:按下录音按钮开始计时,松开按钮停止计时(按下按钮时长未满1秒复位,),点击发布按钮复位实现效果图先创建一个处理录音功能的工具类,其中包含 AVFoundation 框架中的 AVAudioRecorder 类,还有判断录音时长是否满一秒的跳转flag值,还有按下按钮和松开按钮两个事件需要执行的方法。#import <Foundation/Foundation.h>...原创 2019-06-02 17:05:12 · 1126 阅读 · 0 评论 -
Git 忽略提交 .gitignore
添加 .gitignore 配置文件在我们平时使用 Git 进行版本管理的时候,上传代码时常常会将 Finder 用来存储这个文件夹的显示属性的.DS_Store 文件上传到GitHub上去,这样在合作开发时很不方便,那么如何忽略追踪这些没有用到文件呢?这时,我们会通过创建一个 .gitignore 配置文件,写入特定规则,来指定 Git 忽略追踪某个目录或文件,不将其纳入版本管理,减少线上代...原创 2019-06-20 15:32:56 · 382 阅读 · 0 评论 -
iOS获取设备和APP权限信息(内含plist文件的读写)
文章目录前言获取设备当前的各种信息获取APP能获取到的权限信息(内含plist文件的读写)前言下面各种获取到的信息分为了两大类,一种是获取APP载体设备当前的各种信息,另一种是APP自身能取得的权限,两部分中的“说在前面的”只是记录了一个我的学习过程,所有调取代码都在示例代码或者demo里,可跳过这部分自取代码这是我的demo地址 GitHub,我将其封装成了一个工具类,欢迎clon...原创 2019-07-23 21:36:09 · 2982 阅读 · 0 评论 -
从atomic关键字说到多线程安全(内含iOS给代码加锁方法总结)
atomic是什么原子性:在默认情况下,由编译器所合成的方法会通过锁定机制确保其原子性(atomicity)。如果声明属性时不显式地声明nonatomic关键字,那这个属性就是“原子的”(atomic)。如果属性具备nonatomic特质,则不使用同步锁。atomic 和 nonatomic这对属性关键字是和线程安全挂钩的,虽然 atomic 属性关键字会给该 property 的 gett...原创 2019-07-30 09:40:45 · 1850 阅读 · 0 评论 -
初识Block
BlockBlock是什么Block的语法Block是什么Block是带有自动变量的匿名函数。如字面意思,Block没有函数名,另外Block带有插入记号&quot;^&quot;,插入记号便于查找到Block,后面跟的一个括号表示块所需要的一个参数列表。和函数一样,可以给块传递参数,并且也具有返回值。不同点在于,块定义在函数或者方法内部,并且能够访问在函数或方法范围内的任何变量。通常情况下,这些变量能够访问但...原创 2018-10-11 19:23:34 · 753 阅读 · 0 评论