- 博客(37)
- 收藏
- 关注
原创 iOS应用沙盒文件权
`iOS`应用沙盒文件权限1.可在`iTunes`、爱思助手中查看沙盒文件。2.可以在`iPhone`中的文件中查看相应文件夹层级以及文件。1.可在iTunes、爱思助手中查看沙盒文件。 Application supports iTunes file sharing = YES2.可以在iPhone中的文件中查看相应文件夹层级以及文件。Supports opening documents in place = YES...
2021-07-15 14:02:02
1582
原创 iOS 报错 Build input file cannot be found:
iOS 报错 Build input file cannot be found:ios Build input file cannot be found:Build input file cannot be found: 文件没有被发现但是Build Pases 里面copy 却有。第一步找到报错target下面的 Build Phase -> Copy Bundle Resources第二步检查 Copy Bundle Resources 下文件为灰色的,选中点击减号删除。第三步 重新
2021-03-24 16:32:35
14173
转载 iOS 边学边记 autorelease 和 @autoreleasepool
前言作为 iOS 开发者,在面试过程中经常会碰到这样一个问题:在 ARC 环境下autorelease对象在什么时候释放?如果你还不知道怎么回答,或者你只有比较模糊的概念,那么你绝对不能错过本文。本文将通过Runtime objc4-756.2版本源码、macOS 与 iOS 工程示例来分析@autoreleasepool的底层原理。并在最后针对有关autorelease和@autoreleasepool的一些问题进行解答。1. 简单聊聊 ARC 与 MRC苹果在 iOS 5 中引入了ARC(Aut
2020-12-22 16:01:24
455
转载 iOS 边学边记 最详细的Runtime
本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机。主要内容如下:引言简介与 Runtime 交互Runtime 基础数据结构消息动态方法解析消息转发健壮的实例变量 (Non Fragile ivars)Objective-C Associated ObjectsMethod Swizzling总结引言曾经觉得Objc特别方便上手,面对着 Cocoa 中大量 API,只知道简单的查
2020-12-21 20:29:48
282
转载 iOS 边学边记 GCD使用详解
一、GCD简介Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。是一个在线程池模式的基础上执行的并发任务为什么要用 GCD 呢?GCD 可用于多核的并行运算GCD 会自动利用更多的 CPU 内核(比如双核、四核)GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程)程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码二、GCD 任务和队列2..
2020-12-15 17:50:35
572
转载 iOS 边学边记 深入了解weak底层实现详解
iOS开发者都知道,当一个对象被释放时,所有对这个对象弱引用的指针都会释放并置为nil,那么系统是如何存储这些弱引用对象的呢?又是如何在一个对象释放时,将这些指向即将释放对象的弱引用的指针置为nil的呢?下面我们通过分析SideTable的结构来进一步了解内存管理的弱引用存储细节。weak结构在runtime中,有四个数据结构非常重要,分别是SideTables,SideTable,weak_table_t和weak_entry_t。它们和对象的引用计数,以及weak引用相关。SideTables下
2020-12-12 18:20:25
560
转载 iOS 边学边记 Weak的实现(三)
正文 接 Weak的实现(二)3 设置弱引用标志位inline voidobjc_object::setWeaklyReferenced_nolock(){ retry: //去对象的isa指针 isa_t oldisa = LoadExclusive(&isa.bits); isa_t newisa = oldisa; //如果不是non-pointer if (slowpath(!newisa.nonpointer)) { Cle
2020-12-12 17:02:39
158
转载 iOS 边学边记 Weak的实现(二)
正文 接 Weak的实现(一)2 生成新的weak_entry_t插入到weak_entries中/** * Registers a new (object, weak pointer) pair. Creates a new weak * object entry if it does not exist. * * @param weak_table The global weak table.弱引用全局表 * @param referent The object pointed to
2020-12-12 16:25:29
121
转载 iOS 边学边记 Weak的实现(一)
本文较长分三篇按序阅读体验更佳,第四篇为辅助阅读按需看1.Weak的实现(一)2.Weak的实现(二)3.Weak的实现(三)4.Weak的实现-&SideTables()[oldObj]带着问题看源码:1.大家都知道weak的底层实现是一个散列表,那么散列表的结构是什么样的?2.散列表的key是什么,value是什么,散列函数是怎样的?3.通过几次查找才能找到对应的弱引用?4.如何查找弱引用对象的引用计数?5.一个对象对应一个SideTable表而一个SideTable对应多个
2020-12-12 16:13:31
222
翻译 iOS Texture <AsyncDisplayKit> ASViewController
ASViewController是UIViewController的一个子类,它为承载ASDisplayNode层次结构添加了一些有用的特性。ASViewController可以代替任何UIViewController,包括UINavigationController、UITabBarController和UISplitViewController,或者作为modal view controller使用。使用ASViewController的好处:节省内存。一个离开屏幕的ASViewControl
2020-12-11 16:41:02
280
翻译 iOS Texture<AsyncDisplayKit> Subclassing
Subclassing创建子类时最重要的区别是您是编写ASDKViewController还是ASDisplayNode。这听起来很明显,但由于其中一些差异是微妙的,所以记住这一点很重要。ASDisplayNode虽然子类化node类似于编写UIView子类,但要遵循一些准则,以确保充分利用框架的潜力,并确保node的行为符合预期。-init使用nodeBlocks时,在后台线程上调用此方法。但是,由于在-init完成之前没有其他方法可以运行,因此不必在该方法中使用锁。要记住的最重要的一点是in
2020-12-11 16:09:38
236
翻译 iOS Texture <AsyncDisplayKit> 智能预加载
智能预加载当一个node能够被异步并发地渲染和测量时,它非常强大,另一个对纹理至关重要的层是智能预加载的思想。正如在《入门》中指出的那样,在一个node容器的上下文之外使用一个node很少是有利的。这是因为所有node都有其当前接口状态的概念。此interfaceState属性由所有容器在内部创建和维护的ASRangeController不断更新。在容器外部使用的node不会被任何范围控制器更新其状态。这有时会导致闪烁,因为node在意识到它们已经出现在屏幕上而没有任何警告后被渲染。接口状态范围
2020-12-11 15:40:38
264
翻译 iOS Texture <AsyncDisplayKit> 学习之入门
入门Texture的基本单位是node。ASDisplayNode是UIView上的抽象,而UIView又是CALayer上的抽象。与只能在主线程上使用的视图不同,node是线程安全的:您可以在后台线程上并行实例化和配置它们的整个层次结构。为了保持用户界面的流畅和响应,你的应用程序应该以每秒60帧的速度呈现——这是iOS上的黄金标准。这意味着主线程有六十分之一秒的时间来推动每个帧。执行所有布局和绘图代码需要16毫秒!而且由于系统开销,在导致帧丢失之前,代码的运行时间通常少于10毫秒。Texture允许
2020-12-11 14:58:14
2106
原创 iOS 边学边记 sizeToFit 与 sizeThatFit 区别
先看看苹果官方文档对这连个的方法的解释:// return 'best' size to fit given size. does not actually resize view. Default is return existing view size- (CGSize)sizeThatFits:(CGSize)size; // calls sizeThatFits: with current view bounds and changes bounds size.- (void)size
2020-12-10 15:51:07
803
原创 iOS 边学边记 NSSet于NSArray的区别及基本用法
首先,NSSet和NSArray功能性质一样,用于存储对象,属于集合。但是和NAArray不一样的是它属于 “无序集合”,在内存中存储方式是不连续的,而NSArray是 “有序集合” 它内存中存储位置是连续的。其次,NSSet的效率确实是比NSArray高的,因为它主要用的是hash算法,我的理解中,NSSet在集合中寻找一个元素的时候是一针见血,找到目标顺着就去了;而NSArray的话需要循环集合中所有的对象,来找到所需要的目标。所以,循环所有对象与直接去对象的位置获取,速度就显而易见了。最后,你额外
2020-12-10 10:02:26
492
转载 iOS 边学边记 升级ios14 Xcode真机调试启动非常慢的问题解决
1.打开“访达”,shift+command+G到资源库 “~/Library/Developer/Xcode/iOS DeviceSupport/”删除该目录下所有文件 快捷键(shift+command+G到资源库)全部删除文件夹下所有文件2.选择Xcode->Window->Devices and Simulators 真机设备,鼠标右键选择unpair the deviceimage3.重新启动Xcode...
2020-12-09 19:01:15
2039
原创 iOS App转让流程
工作中避免不了,公司要求App账号改变,需要转让App.记录一下转让流程. 例如,A账号中有一个App需要转让到B账号中.如果只有你一个人来操作这些,那么,先登录A账号记录一下App的信息,已经A账号中的一些信息.如果是两个人一起 ,那就直接开始操作就行了.登录A账号AppStoreConnect 找到App.进入App详细信息,默认在AppStore tab信息下,最下面的额外信息中有个转让App.点击转让App之后有个条件列表,需要满足条件才可以转让.如果App中使用了TestFlight
2020-12-09 14:56:51
1040
3
转载 iOS 边学边记 性能优化篇 二
一、首页启动速度启动过程中做的事情越少越好(尽可能将多个接口合并)。不在UI线程上作耗时的操作(数据的处理在子线程进行,处理完通知主线程刷新节目)。在合适的时机开始后台任务(例如在用户指引节目就可以开始准备加载的数据)。尽量减小包的大小。优化方法:量化启动时间启动速度模块化辅助工具(友盟,听云,Flurry)二、页面浏览速度json的处理(iOS 自带的NSJSONSerialization,Jsonkit,SBJson)。数据的分页(后端数据多的话,就要分页返回,例如网易新
2020-12-09 14:39:05
136
转载 iOS 边学边记 性能优化篇 一
前言很多时候我们做APP,不是完成相关的功能就行,很多时候需要我们不断的进行优化,特别对于像淘宝和微信等巨型app来说,如果没有优化,那会是什么样的结果,一定会有很多人“脱坑”,又何谈发展啊。下面我们就说一下iOS性能优化。一、 用ARC管理内存ARC和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动干预了,再也不会被MRC折磨了。下面提供一些ARC知识。苹果官方文档Matthijs Ho
2020-12-09 14:31:23
195
原创 iOS 边学边记 UIView 的 setNeedsDisplay 和 setNeedsLayout 的区别
(1) 在 Mac OS 中 NSWindow 的父类是 NSResponder,而在 iOS 中 UIWindow 的父类是 UIVIew。程序一般只有一个窗口但是会有很多视图。(2) UIView 的作用:负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体、等等。(3) UIViewController:负责创建其管理的视图及在低内存的时候将他们从内存中移除;还为标准的系统行为进行响应。(4) layOutSubViews:可以在自己定制的视图中重载这个方法,
2020-12-09 10:25:07
358
原创 iOS 边学边记 流媒体传输协议全解
互联网技术的本质就是通信协议,各种通信协议将各种终端连接了起来。流媒体协议是建立在互联网TCP/IP协议上的多媒体数据流传输分发协议。它主要为主播端和观众端提供数据传输和分发的解决方案。现在互联网上的流数据占据带宽的大部分,音频、短视频、长视频占据了互联网应用的主流。数据流通过传输技术被运来运去,那么流数据遵循哪些传输规则和协议呢,各个协议有什么优缺点呢?RFC 概要RFC英文全称为Request For Comments,中文字面意思是“请求评论”,它是一系列编号文件。RFC文档最初由Steve
2020-12-03 13:49:01
707
1
原创 iOS 边学边记 直播SRT、UDT协议详解
什么是SRT协议?概述SRT协议是基于UDT的传输协议,保留了UDT的核心思想和机制,抗丢包能力强,适用于复杂的网络。在LiveVideoStack线上分享中,新浪音视频架构师 施维对SRT协议的原理、优缺点特性以及在流媒体中的应用进行了详细解析。UDTUDT是基于UDP的数据传输协议(UDP-based Data Transfer Protocol,简称UDT)是一种互联网数据传输协议。UDT的主要目的是支持高速广域网上的海量数据传输,而互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差
2020-12-03 10:59:10
1527
转载 iOS 边学边记 RTMP 协议详解
一、概述RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。握手、消息块概念握手的目的是为了确认对端RTMP的Version和确认对端能互相通信。消息块就是消息的载体,是RTMP协议最重要的载体,这个载体是有一定格式的,如果把Client和Server端当作铁路的两个站点,那这个消息块就是火车,它负责运输货物。
2020-12-02 17:45:30
527
2
转载 iOS 边学边记 移动直播技术优化
移动直播技术优化探究现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集、美颜/滤镜/特效处理、编码、封包、推流、转码、分发、解码/渲染/播放。直播常见的问题包括主播在不稳定的网络环境下如何稳定推流?偏远地区的观众如何高清流畅观看直播?直播卡顿时如何智能切换线路?如何精确度量直播质量指标并实时调整?移动设备上不同的芯片平台如何高性能编码和渲染视频?美颜等滤镜特效处理怎么做?如何实现播放秒开?如何保障直播持续播放流畅不卡顿?什么是视频?首先
2020-12-02 13:41:21
508
转载 iOS 边学边记 动画篇:核心动画Core Animation CABasicAnimation CAKeyframeAnimation CATransition CAAnimationGroup
1、什么是核心动画Core Animation(核心动画)是一组功能强大、效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用。 核心动画所在的位置如下图所示:可以看到,核心动画位于UIKit的下一层,相比UIView动画,它可以实现更复杂的动画效果。核心动画作用在CALayer(Core animation layer)上,CALayer从概念上类似UIView,我们可以将UIView看成是一种特殊的CALayer(可以响应事件)。 实际上,每一个view都有其对应的
2020-11-30 14:07:29
205
原创 iOS 边学边记 CALayer 属性position 、anchroPoint、隐式动画
## 一、position和anchorPoint1、CALayer有2个非常重要的属性:position和anchorPoint@property CGPoint position;用来设置CALayer在父层中的位置以父层的左上角为原点(0, 0)@property CGPoint anchorPoint;称为“定位点”、“锚点”决定着CALayer身上的哪个点会在position属性所指的位置以自己的左上角为原点(0, 0)它的x、y取值范围都是0~1,默认值为(0.5, 0.5)2、图示
2020-11-30 10:09:11
263
原创 iOS 边学边记 视频格式mp4和m3u8 之间的区别
m3u8文件格式与mp4之间有什么区别.m3u8是一种非常特殊的文件格式,很多朋友都知道m3u8是可以用于视频播放的,那么它与传统的视频文件Mp4究竟有什么区别么,想要了解请往下看!M3U8视频格格式其实是一种M3U,只是它的编码格式是UTF-8格式。M3U用Latin-1字符集编码。M3U8格式特点是带有一个目录信息或文件。MP4视频文件 即 mp4 (文件格式) 。 MPEG-4包含了MPEG-1及MPEG-2的绝大部份功能及其他格式的长处,并加入及扩充对虚拟现实模型语言(VRML , Virtu
2020-11-28 11:09:48
4849
原创 iOS 边学边记 HLS协议 m3u8 ts详解
1.HLS综述谈HLS 就不得不谈苹果,谈苹果就不得不提乔帮主。HLS就是“HTTP Live Streaming”的缩写,它诞生自2009年,QuickTime和iPhone3GS黄金搭档下的一个标准,一个意在颠覆流媒体产业的新协议。它的工作原理简单来说就是把一段视频流,分成一个个小的基于HTTP的文件来下载。当媒体流正在播放时,客户端可以根据当前网络环境,方便地在不同的码率流中做切换,以实现更好的观影体验。HLS的出现是为了解决苹果原生环境中的流媒体播放,这个协议可以方便地让Mac和iPhone播
2020-11-26 14:46:50
3921
转载 iOS 边学边记 直播原理总结,从理论到实践
**一、直播原理及流程**1.一个完整直播app原理直播原理:把主播录制的视频,推送到服务器,在由服务器分发给观众观看。直播环节:推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞)2.直播app实现流程1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动3.直播app架构4.直播app技术点二、直播基础知识介绍:1.采集视频、音频1.1 采
2020-11-25 11:30:21
3439
原创 iOS 边学边记 CATextLayer 详解、使用
在学习《小码哥底层原理笔记:性能优化》中 “尽量使用轻量级的对象,比如用不到事件处理的地方,可以考虑使用CALayer取代UIView” 所以就学习了一下UIlabel的替代品 CATextLayer。CATextLayerCore Animation提供了的CALayer的子类,它以图层的形式包含了UILabel几乎所有的绘制特性,并且额外提供了一些新的特性。同样,CATextLayer也要比UILabel渲染得快得多。很少有人知道在iOS 6及之前的版本,UILabel其实是通过WebKit来
2020-11-24 11:18:32
1931
原创 iOS 边学边记 获取系统截屏事件
1.系统通知名称UIApplicationUserDidTakeScreenshotNotification以下是系统给出的说明// This notification is posted after the user takes a screenshot (for example by pressing both the home and lock screen buttons)UIKIT_EXTERN NSNotificationName const UIApplicationUserDidT
2020-11-23 14:17:30
471
原创 iOS 边学边记之//进程//线程
进程什么是进程进程是指在系统中正在运行的一个程序。每个进程之间是相互独立的,每个进程运行在其专用且说保护的内存空间。如:打开qq,qq程序就是一个进程,一个程序可以对应多个进程,如:qq多开。线程什么是线程1个进程要想执行任务,必须得有线程。(每个进程至少要有一条线程)。2.进程中的所有任务都是在线程中执行。线程串行1个线程中怼任务是串行的如果要在一个线程中执行多个任务,那么只能一个一个按顺序怼执行任务。也就是说,在同一时间内一个线程只能执行一个任务。线程/进程比较1 线程是cp
2020-11-20 19:51:50
87
原创 iOS 边学边记
做了这么多年的iOS 开发 ,发现自己的编程水平实在是不忍直视。也没有记博客的习惯,所以想着重新学习,深入学习一下,提升一下自己。
2020-11-20 18:43:47
106
原创 iOS 边学边记 WKWebView与js交互详解
iOS下OC与JS的交互(WKWebview-MessageHandler实现)在开发过程中,iOS 中实现加载 web 页面主要有两种控件,UIWebView 和 WKWebview,两种控件对应具体的实现方法不同。现在苹果公司已经不允许使用webview的app上架,所以只针对WKWebView。一、 WKWebView的代理方法1.WKNavigationDelegate该代理提供的方法,可以用来追踪加载过程(页面开始加载、加载完成、加载失败)、决定是否执行跳转。// 页面开始加载时调用
2020-11-20 08:49:48
5126
原创 iOS UICollectionView 自定义section HeaderView
iOS UICollectionView 自定义section HeaderView首先自定义一个view 继承于 UICollectionReusableView,在自定义headerview中创建自己需要的ui 如:label, button,因为UICollectionReusableView 创建的时候不走init所以,这里使用懒加载。.h//// HeaderReusableView.h// TestBaseView//// Created by 金英杰 on 2020/11/
2020-11-20 08:36:13
1743
原创 自定义TabbarController, tabbarItem ,tabbar 屏幕适配
自定义TabbarController, tabbarItem ,tabbar 屏幕适配tabbarItem.h文件//// JHKTabBarItem.h// TestBaseView//// Created by 金英杰 on 2020/11/14.//@protocol JHKTabBarItemDelegate;#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface JHKTabBarIte
2020-11-19 16:52:49
329
原创 iOS 开发常用宏定义记录
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2020-11-19 16:42:08
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人