Objective-C
文章平均质量分 95
YFL_iOS
文艺程序员,美食爱好者。
喜爱编程、健身,喜爱写字、读书。
喜爱一切能让自己变得美好的事物。
展开
-
iOS 内存管理
文章目录 一、NSProxy 1、作用: 用于消息转发 2、定时器的细节 二、内存布局 三、标记指针(Tagged pointer) 四、OC 对象的内存管理 1、内存管理 2、copy、mutableCopy 关键字 3、引用计数 4、weak 指针 5、autorelease 一、 NSProxy1、作用 : 用于消息转发NSProxy没有父类,和 NSObject 算是同一级别的存在原创 2021-04-11 20:30:22 · 495 阅读 · 0 评论 -
iOS Runtime
文章目录 一、简介 二、isa 指针一、简介OC 是一门动态性比较强的语言,跟 C 和 C++ 有很大的不同,OC 动态性都是由 runtime的 API 来支撑的。runtime的代码是开源的。源码由 C、C++、汇编语言编写的。下载链接二、isa 指针要想学习 runtime,首先要了解他一些底层常用的数据结构,例如,isa指针。在arm64之前,isa就是一个普通的指针,存储这 class、meta-class对象的内存地址。从 arm64架构开始,对 isa进行优化,变成一个共用体原创 2021-04-10 00:54:38 · 514 阅读 · 1 评论 -
iOS 线程安全
文章目录 一、常见的多线程方案 1、pthread 2、NSThread 3、GCD 4、NSOperation 二、常见混淆的术语 1、同步异步 2、并发串行 三、线程安全 1、资源共享 2、生产消费模式 3、典型线程安全案例 4、线程安全解决方案 四、多种线程同步方案的比较 1、性能对比 2、自旋锁、互斥锁对比 五、关于 atomic 六、读写安全 1、pthread_rwlock_t 2、dispach_barrier_async 一、常见的原创 2021-04-07 19:38:03 · 1180 阅读 · 3 评论 -
iOS 卡顿
文章目录 一、CPU 和 GPU 1、CPU 2、GPU 二、卡顿 1、屏幕成像原理 2、卡顿产生原因 3、卡顿解决思路 4、卡顿解决方案 三、离屏渲染 1、什么是离屏渲染 2、离屏渲染消耗性能 3、如何触发离屏渲染 4、如何检测离屏渲染 四、卡顿检测 一、CPU 和 GPU在屏幕成像过程中,CPU 和 GPU 起着至关重要的作用1、CPU(中央处理器)负责: 对象的创建(alloc)和销毁(release)、对象属性的调整原创 2021-04-07 12:12:43 · 619 阅读 · 0 评论 -
iOS RunLoop
文章目录 一、RunLoop 基础概念 1、什么是 RunLoop 2、RunLoop 应用范畴 3、RunLoop 的作用 二、RunLoop 对象 1、获取 RunLoop 2、RunLoop 和线程的关系 3、RunLoop 相关的类 4、RuLoop 底层数据结构 5、RunLoop 运行逻辑 6、RunLoop 休眠 三、RunLoop的实际应用 1、线程保活 2、定时器失效 3、卡顿检测 4、性能优化原创 2021-03-31 22:41:45 · 467 阅读 · 0 评论 -
iOS Category
文章目录 一、基本介绍 二、Category 和 Extension 的区别 三、数据结构 四、运行时合并 五、+ (void)load 方法 六、+ (void)initialize 方法 七、总结一、基本介绍分类, Apple 官方文档是这么介绍的You use categories to define additional methods of an existing class—even one whose source code is unavailab原创 2021-03-29 21:50:41 · 250 阅读 · 0 评论 -
iOS 对象
文章目录 一、实例对象的本质 1、OC 实例对象在内存中是结构体 2、计算实例对象所占内存 2.1 class_getInstanceSize(Class cls) 函数 2.2 malloc_size(obj) 函数 2.3 sizeof(Type) 运算符 2.4 总结 二、对象的分类 1、实例对象(instance) 2、类对象(class) 3、元类对象(meta-class) 三、isa 和 superclass 指针 1原创 2021-03-28 17:12:18 · 322 阅读 · 0 评论 -
iOS 匿名函数
文章目录一、匿名函数基本知识1、C 语言函数的定义2、GO 语言中匿名函数二、OC 中的匿名函数1、Block 定义2、Block 类型的变量3、Block 作为参数传递4、Block 作为返回值三、Block 实现1、实质2、...原创 2020-11-16 20:02:00 · 984 阅读 · 0 评论 -
iOS 14.0 beta 沙盒缓存策略变化
一、问题描述 iOS 14.0 beta 暴露了开发者存储在沙盒 Document 目录下的所有缓存数据二、如何安装 iOS 14.0 beta 版本 2.1 安装 Profile 文件 2.2 检查更新 2.3 iOS 14 支持设备 6s 以上三、如何重现问题 QQ音乐、CSDN客户端的表现截图 正常的 例如:新浪微博 截图四、如何解决问题 4.1 问题的产生 4.2 问题解决一、问题描述偶然间更新了 iOS 14.0 beta 版原创 2020-06-28 16:54:17 · 869 阅读 · 0 评论 -
iOS scrollsToTop失效解决
失效场景: 当一个控制器上有多个UIScrollView失效的原因: On iPhone, we execute this gesture only if there’s one on-screen scroll view with scrollsToTop == YES. If more than one is found, none will be scrolled.scrollv...原创 2016-12-09 13:39:06 · 5001 阅读 · 0 评论 -
iOS 内存管理机制
一、内存管理概述在程序运行过程中要创建大量的对象,和其他高级语言类似,在OC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意:基本类型是由系统自己管理的,放在栈上)。如果一个对象创建并使用后没有得到及时释放那么就会占用大量内存。其他高级语言如C#、Java都是通过垃圾回收来(GC)解决这个问题的,但在OC中并没有类似的垃圾回收机制。在Xcode4.2及之后的版本中由于引入了ARC(...原创 2016-03-31 14:35:00 · 803 阅读 · 0 评论 -
iOS 视频播放(AVPlayer)
文章目录 一、AVPlayer 1、简介 2、视频播放的解决方案 二、AVPlayer中的MVC 1、v层 :AVPlayerLayer 2、m层 :AVPlayerItem 3、c层 :AVPlayer 三、实现简单的播放、暂停功能 1、播放 2、暂停 3、视频播放暂停实现一、AVPlayer1、简介 OC 提供了三种视频播放解决方案,分别是原创 2018-04-17 14:59:40 · 26840 阅读 · 0 评论 -
iOS 音频录制、播放(本地、网络)
文章目录 一、录音机(AVAudioRecorder) 1、简介 2、如何使用 3、具体实现(开始、暂停、停止、播放 四个功能) 4、附件实现demo 二、播放音频 1、播放本地音频文件(AVAudioPlayer) 2、播放网络音频文件(Audio Queue Servies - 音频队列服务) <1> 音频...原创 2018-04-16 14:16:11 · 9014 阅读 · 1 评论 -
iOS AVAudioPlayer使用
文章目录 一、AVAudioPlayer 1、简介 2、优缺点 3、如何使用 4、扩展功能 (1) 如何做后台播放 (2) 如何做输出改变监听(拔出耳机音乐暂停播放) (3) 歌词轮播实现思路 (4) 关于NSTimer(循环引用、NSRunLoopMode)一、AVAudioPlayer1、简介 播放较大的音频或者要对音频有精确的,这种情况会选择使用AVFounda原创 2018-04-10 11:08:56 · 16943 阅读 · 0 评论 -
iOS 音效播放
在ios中,音频播放从形式上可以划分成两种 : 音效播放 和 音乐播放。音效播放通常指一些点缀性质音频,对于这类音频不需要进行进度、循环等控制。在ios中我们用 AudioToolbox 来完成音效播放。1、使用场景( 1 ) 接受推送的提示音 ( 2 ) 二维码扫描成功的提示音(类似微信) …..2、本质将短音频注册到系统声音服务3、局限性( 1 ) 播放时间不...原创 2018-03-01 15:49:50 · 1328 阅读 · 0 评论 -
iOS 数组与集合
文章目录 一、集合和数组的对比 1、集合的概念 2、集合的使用优点 3、对比集合和数组 二、不可变数组和可变数组的关系 1、数组的可变形式原理 2、NSArray和NSMutableArray的本质区别一、集合和数组的对比不仅仅是iOS开发的Objective-C和Swift语言,很多其他的开发语言都有集合的概念,数组和字典以及Set是比较常见的方式。关于集合的数...原创 2019-07-06 23:49:11 · 1910 阅读 · 0 评论 -
iOS KVC实现原理
文章目录 一、KVC在iOS中的定义 二、常用的方法说明 三、赋值实现原理 四、取值实现原理一、KVC在iOS中的定义 KVC的全称为keyValueCoding,简称键值编码。是对NSObjcet的扩展,分类名为 : NSKeyValueCoding 我们经常用KVC或者setter方法来触发KVO,实现键值变化监听,实现一些功能。二、常用的方法说明 // 1、原创 2018-05-05 20:23:35 · 4811 阅读 · 0 评论 -
iOS hitTest
文章目录 一、什么是hitTest 二、hitTest的调用顺序 三、事件的传递顺序 四、hitTest的实现思路 五、hitTest的运用场景 1、事件穿透 2、子视图超出父视图范围一、什么是hitTest- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event...原创 2017-11-01 14:03:06 · 15495 阅读 · 1 评论 -
iOS 消息转发机制
文章目录 一、消息发送概述 二、runtime 三次 拯救机会 1、Method resolution 2、Fast fowarding 3、Normal forwarding一、消息概述在编码过程中,我们经常会遇到类似 unrecognized selector 程序 crash的异常。可以总结到如下场景:1、方法只是声明了,对象直接调用 2、对象 使用 ...原创 2017-10-31 11:30:45 · 3516 阅读 · 0 评论 -
iOS Notification实现原理
目录 一、通知的基本使用 1、基本概念 2、什么情况下使用通知 3、如何使用通知 4、使用通知需要注意哪些细节 二、通知的实现原理 1、概述 2、实现一、通知的基本使用1、基本概念 NSNotification 是iOS中一个调度消息通知的类,采用单例模式设计,在程序中实现传值、回调等地方应用很广。在iOS中,NSN...原创 2017-07-26 14:31:36 · 7819 阅读 · 1 评论 -
iOS KVO的使用和原理实现
文章目录 一、KVC(键值编码 key-value-coding) 1、概念 2、简单使用 1&gt; 注册观察者,添加观察对象属性 2&gt; 实现回调方法 3&gt; 移除观察者 4&gt; 测试触发kvo 3、注意细节 二、KVO(键值监听 key-value-observer)...原创 2017-07-24 17:04:38 · 3116 阅读 · 0 评论 -
iOS 笔试面试题
1、为什么说OC是一门动态语言?主要体现以下三个方面: 动态类型、动态绑定、动态加载 (1) 动态类型 : 即运行时再决定对象的类型。简单说就是id类型,任何对象都可以被id指针所指,只有在运行时才能决定是什么类型。 例如 : `NSString *string = [[NSData alloc]init];` 编译时 是 NSString 类型,运行时 却是 NSData 类型 (2)原创 2018-04-23 17:42:34 · 1651 阅读 · 0 评论 -
iOS 数据持久化之 归档
文章目录 一、概念 1、归档 2、解档 二、归档使用 1、遵守NSCoding协议 2、协议方法的实现 三、归档使用的进一步思考 当对象成员变量非常多,NSCoding 两个协议方法 将会变得非常冗长,有什么办法可以解决 ?一、概念1、归档 归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存。即数据的存储过程。...原创 2017-10-28 16:05:16 · 367 阅读 · 0 评论 -
iOS TCP协议的理解(基于Socket【套接字】)
文章目录 一、什么是TCP协议 二、TCP的三次握手和四次挥手 三、什么是Socket(套接字) 四、Soeket有什么作用 五、导入 AsyncSocket 六、如何使用Socket Program(基于AsyncSocket)一、什么是TCP协议TCP协议对应于传输层,主要解决数据如何在网络中传输,而应用层的HTTP协议,主要解决如何...原创 2016-04-02 10:58:31 · 4990 阅读 · 0 评论 -
ios Instruments之Time Profiler
文章目录 一、Time Profiler(方法执行时间) 1、简介 2、原理 3、注意事项 4、使用步骤(结合场景)一、Time Propfiler1、简介 Time Profiler帮助我们分析代码(方法)的执行时间,找出导致程序变慢的原因, 告诉我们“时间都去哪儿了?”。 在开发的过程中,我们经常能感觉到,点击某一按...原创 2018-04-20 18:00:04 · 1863 阅读 · 0 评论 -
ios Instruments之Allocations
文章目录一、Allocations(监测内存分配) 1、简介 2、如何使用一、Allocations1、简介 性能优化中使用Instruments-Allocations工具进行内存分配使用监测。 内存爆增,且持续不释放的情况,除了是内存泄露外,还有就是对性能代码质量不过关导致。 Allocations能够帮你精准定位到内存占用过多的代码。 ...原创 2018-04-19 18:39:22 · 3026 阅读 · 0 评论 -
iOS Instruments之Leaks
文章目录 一、内存泄露和内存溢出 1、内存泄露 2、内存溢出 3、内存泄露可能引发的问题 二、如何检测你的程序存在内存泄露 1、静态分析 2、动态检测一、内存泄露和内存溢出1、内存泄露 程序在申请内存后,无法释放已申请的内存空间 标识 : dealloc()方法未调用2、内存溢出程序在申请内存时,没...原创 2018-04-19 00:41:46 · 4574 阅读 · 0 评论 -
ios MV(X)系类的总结
一、先回顾先MVX系列1、MVC图示 所有的通信都是单向的 (1) View 传送指令到 Controller (2) Controller 完成业务逻辑后,要求 Model 改变状态 (3) Model 将新的数据发送到 View,用户得到反馈2、MVP图示 MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向 (1) 各部分之间的通信,都是双向的。原创 2016-01-27 14:07:05 · 861 阅读 · 0 评论 -
ios MVP模式
一、MVP模式图示MVP 模式将 MVC中的controller 改名为 Presenter,同时改变了通信方向。特点 : (1)各部分之间的通信,都是双向的。 (2)View 与 Model 不发生联系,都通过 Presenter 传递。 (3) View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部原创 2016-01-27 11:27:54 · 14128 阅读 · 0 评论 -
ios 浅析MVVM模式
一、MVVM是为viewcontroller瘦身? 简单来说,MVVM的横空出世是为了解决MVC模式下的viewcontroller”瘦身”。 在MVC模式下,有一个显著不好的地方,就是viewcontroller即C层,有人称之为Massive View Controller(臃肿的视图控制器),为什么称之为臃肿的视图控制器?原因其实很简单,我们一直都把数据请求服务层放到controller,原创 2016-01-26 17:39:17 · 10213 阅读 · 0 评论 -
ios MVC模式浅析
一、MVC模式指的是什么?1、解释: MVC的全称是Model View Controller ,是模型(model)–视图(view)–控制器(controller),他表示一种常见客户端软件开发框架。2、该模式的原则:Don’t repeat yourself 。也就是说,要求代码尽可能的共用起来,解决代码冗余的问题,其实很多设计模式都是基于这样的原则做的。3、MVC设计模式的要点: (1)原创 2016-01-22 18:40:01 · 888 阅读 · 0 评论 -
ios 移动端架构浅析
一、什么是架构,架构主要考虑什么事情 1、架构(software architecture): 架构是一些列相关的抽象模式,用于指导大型软件系统各个方面的设计。多数架构师会从直接上来认识他,但要给出精确的定义却很难。 2、app架构主要考虑的事情: (1) 网络层: 如何让开发人员方便安全调用网络API,而且在各种网络环境下都能有良好的体验。 (2)页面展示: 页面如何组织,尽可能降低业务逻原创 2016-01-22 11:27:57 · 1086 阅读 · 0 评论 -
ios distill failed for unknow reasons解决
工程图片文件夹images.xcassets报的红色错误: distill failed for unknow reasons 点击查看 Unable to create image for file: ///Users/cherish/Yuexianghui__SVN/izizhu/LeXiangLife/Images.xcassets/AboutMe/ReturnMoneyCentre原创 2016-01-05 19:38:11 · 3094 阅读 · 0 评论 -
iOS 数字加小数点键盘
遇到textfield要输入价格的时候,这时候就需要键盘是数字+小数点的键盘。field.keyboardType = UIKeyboardTypeNumberPad; 这个只是纯数字键盘,没有小数点,效果如下看了一些博客,大概的思路是纯数字键盘的基础上自定义小数点按钮,对按钮添加点击事件,在点击事件里面获取当前显示在textfield上的字符串,然后往字符串后面追加button....原创 2015-09-15 13:20:02 · 30778 阅读 · 2 评论 -
ios 'Can't add self as subview'崩溃日志详解
问题描述:这个问题非常常见,就是平时我们做一个按钮(我们假设这个页面是RootVC),按钮加一个事件,点击这个事件的时候会push出一个新的控制器A,当我们连续快速(时间间隔在0.5S内,也就是PUSH前一个事件的PUSH动画还没结束之前)点击两次这个按钮的时候,就会导致这个按钮连续响应了两次事件,同时推出了两个控制器A1、A2(这两个控制器都是A类型的),当我们再次点击A1(A2)返回的时候,点击转载 2016-03-10 17:16:10 · 3006 阅读 · 5 评论 -
iOS 优化程序冷启动时间
文章目录 一、何为冷启动 1、冷启动 2、热启动 二、冷启动时间 1、什么是冷启动时间 2、冷启动过程做了什么 三、pre-main()阶段 1、pre-main阶段加载 2、pr-main节点时间测量及其优化 四、main()阶段 1、mai...原创 2018-11-21 19:16:28 · 3299 阅读 · 0 评论 -
iOS CocoaPods 入门学习指南
文章目录 一、关于CocoaPos 1、什么是CocoaPos 2、安装使用CocoaPos 3、pod install 和 pod update 区别 二、制作CocoaPos 1、注册Trunk账号 2、注册github账号 3、配置ssh key 4、制作.podspec文件 一、关于Coco...原创 2018-10-24 21:32:57 · 1153 阅读 · 1 评论 -
mac 更新“.bash_profile”(配置全局环境变量)没生效问题
打开终端cd /Users/用户名是否存在.bash_profileopen .bash_profile不存在即创建touch .bash_profile打开编辑后,让.bash_profile配置的全局变量理解生效source ~/.bash_profile这行脚本可能不起作用,原因是 mac下采用zsh代替bash,而zsh加载的是 ~/.zshrc文件,而 ‘.zsh...原创 2018-10-22 17:39:46 · 29675 阅读 · 1 评论 -
iOS GCD
1、什么是GCD?GCD全称是Grand Central Dispatch,可译为“强大的调度器”。iOS 4开始引入的新一代的多线程编程技术。 开发者只需定义想执行的任务并追加到适当的Dispatch Queu中,GCD就能生成必要的线程并有计划的执行任务。2、什么是任务?想要做什么事情,在GCD中是放在block中的。3、什么是串行队列 和 并行队列 ?串行队列 (DISP...原创 2017-06-15 17:04:41 · 640 阅读 · 0 评论 -
iOS SDAutolayout的使用心得
一、你必须了解以下几个知识点 1、UIView框架下的 - (void)layoutSubviews 方法 首先,看下官网文档的解释:// override point. called by layoutIfNeeded automatically. As of iOS 6.0, when constraints-based layout is used the base implem...原创 2017-05-04 11:56:45 · 6109 阅读 · 3 评论