摘要:
一、SQL 语句 什么是 SQL SQL 全称 structured query language 结构化查询语言,是用于访问和处理数据库的标准的计算机语言。 SQL 指结构化查询语言 SQL 使我们有能力访问数据库 SQL 是一种 ANSI 的标准计算机语言 SQL 能做什么? SQL 可与数据库 阅读全文
posted @ 2020-02-26 14:00
和风细羽
阅读(318)
评论(0)
推荐(0)
摘要:
一、SQL语句执行顺序 结合上图,整理出如下伪 SQL 查询语句。 从这个顺序中可以发现 所有的查询语句都是从 FROM 开始执行的。在实际执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。 接下来,我们详细的介绍下每个步骤的具体执行过程。 二、FROM:执行 阅读全文
posted @ 2020-02-26 14:00
和风细羽
阅读(1504)
评论(0)
推荐(0)
摘要:
一、读写锁读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。读操作可以共享,写操作是排他的,可以有多个在读(与 CPU 数相关),只能有唯一个在写,但不能同时既有读者又有写者。如果读写锁当前没有读者,也没有写者,那么写者可以立刻获得读写锁,否则它必须自旋在那里,直到没有任何写者或读者。如果读写锁没有写者,那么读者可以立... 阅读全文
posted @ 2020-02-26 13:53
和风细羽
阅读(1729)
评论(0)
推荐(0)
摘要:
一、NSOperation 和 NSOperationQueue 简介NSOperation、NSOperationQueue 是苹果提供给开发者使用的一套多线程解决方案。实际上是基于 GCD的更高一层的封装,完全面向对象。但是比 GCD 更简单易用、代码可读性也更高。为什么要使用 NSOperation、NSOperationQueue? 添加在操作完成后执行的代码; 添加操作之间的依赖关... 阅读全文
posted @ 2020-02-26 13:53
和风细羽
阅读(997)
评论(0)
推荐(0)
摘要:
Github:AOMultiproxier、HJProtocolDispatcher协议实现分发器,能够轻易实现将协议事件分发给多个实现者。一、AOMultiproxier.h#define AOMultiproxierForProtocol(__protocol__, ...) ((AOMultiproxier *)[AOMultiproxier multiproxierForProtocol... 阅读全文
posted @ 2020-02-26 13:51
和风细羽
阅读(779)
评论(0)
推荐(0)
摘要:
方式 1:#!/usr/bin/env python# _*_ coding:utf-8 _*_#第一步:首先生成一个500位的数组 驼峰类型的元素 用作文件名 eg:AsdfdfGsdimport randomimport os,sysimport stringfirst = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"second = "abcdefghijklmnopqrstuv... 阅读全文
posted @ 2020-02-26 13:51
和风细羽
阅读(881)
评论(0)
推荐(0)
摘要:
一、Massive AppDelegateAppDelegate 是应用程序的根对象,它连接应用程序和系统,确保应用程序与系统以及其他应用程序正确的交互,通常被认为是每个 iOS 项目的核心。随着开发的迭代升级,不断增加新的功能和业务,它的代码量也不断增长,最终导致了 Massive AppDelegate。在复杂 AppDelegate 里修改任何东西的成本都是很高的,因为它将会影响你的整个 A... 阅读全文
posted @ 2020-02-26 13:50
和风细羽
阅读(1314)
评论(0)
推荐(0)
摘要:
将一个工程分解成各个组件,然后按照某种方式任意组织成为一个拥有完整业务逻辑的工程。大致讨论组件化的三种方案:url-block、protocol-class(和 url-controller 类似)、target-action,以及应用这三种组件化方案的时机、步骤、利弊等。一、为什么需要组件化随着公司业务的不断发展,项目的功能越来越复杂,各个业务代码耦合越来越多,代码量急剧增加,传统的 MVC 或... 阅读全文
posted @ 2020-02-26 13:49
和风细羽
阅读(8822)
评论(0)
推荐(0)
摘要:
一、ImageMagick使用 ImageMagick 对 png 图片做轻量压缩(基本没有减少体积),不损失图片质量,会改变图片文件 hash 值。方法:安装 ImageMagick $ brew install imagemagick压缩工程目录下所有 png 文件 find . -iname "*.png" -exec echo {} \; -exec convert {} {} \... 阅读全文
posted @ 2020-02-26 13:48
和风细羽
阅读(403)
评论(0)
推荐(0)
摘要:
一、图像从文件到屏幕过程首先明确两个概念:水平同步信号、垂直同步信号。CRT 的电子枪按照上图中的方式,从上到下一行一行的扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次的扫描。当电子枪切换到新的一行准备扫描时,显示器会发送一个水平同步信号(Horizonal Synchronization),简称HSync;完成一帧画面绘制后,电子枪会回到原位,显示器会发送一个垂直同步信号... 阅读全文
posted @ 2020-02-26 13:47
和风细羽
阅读(1167)
评论(0)
推荐(0)
摘要:
一、图片加载的工作流 概括来说,从磁盘中加载一张图片,并将它显示到屏幕上,中间的主要工作流如下: 假设我们使用 +imageWithContentsOfFile: 方法从磁盘中加载一张图片,此时的图片并没有解压缩; 然后将生成的 UIImage 赋值给 UIImageView; 接着一个隐式的 CA 阅读全文
posted @ 2020-02-26 13:47
和风细羽
阅读(1898)
评论(0)
推荐(0)
摘要:
Xcode 的工程选项里有一项 Compress PNG Files,会对 PNG 进行 Premultiplied Alpha。游戏开发中会更加关注这个格式,省一些运行时计算。Premultiplied Alpha 是什么呢?Alpha Blending: To Pre or Not To Pre 这篇文章其实说的很清楚。还有《Real Time Rendering》一、Alpha Blendi... 阅读全文
posted @ 2020-02-26 13:46
和风细羽
阅读(1101)
评论(0)
推荐(0)
摘要:
一、前言 《iOS编译过程的原理和应用》文章介绍了 iOS 编译相关基础知识和简单应用,但也很有多问题都没有解释清楚: Clang 和 LLVM 究竟是什么 源文件到机器码的细节 Linker 做了哪些工作 编译顺序如何确定 头文件是什么?XCode 是如何找到头文件的? Clang Module 阅读全文
posted @ 2020-02-26 13:45
和风细羽
阅读(1475)
评论(0)
推荐(0)
摘要:
文章:皮拉夫大王在此 - iOS应用瘦身方法思路整理 一、iOS 内置资源的集中方式 1.1 将图片存放在 bundle 这是一种很常见的方式,项目中各类文件分类放在各个 bundle 下,项目既整洁又能达到隔离资源的目的。采用 bundle 的加载方式为 [UIImage imageNamed:" 阅读全文
posted @ 2020-02-26 13:43
和风细羽
阅读(990)
评论(15)
推荐(2)
摘要:
FastImageCache 是 Path 团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动起来更顺畅,来看看它是怎么做的。一、优化点iOS 从磁盘加载一张图片,使用 UIImageVIew 显示在屏幕上,需要经过以下步骤:从磁盘拷贝数据到内核缓冲区从内核缓冲区复制数据到用户空间生成 UIImageView,把图像数据赋值给 UIImageView如果图像数据为未解码的 P... 阅读全文
posted @ 2020-02-26 13:42
和风细羽
阅读(2219)
评论(0)
推荐(0)
摘要:
一、爱奇艺爱奇艺移动应用优化之路:如何让崩溃率小于千分之二iOS8 对于 App 的 text 段有 60MB 的限制;超过 200MB 的 App 需要连接 WIFI 下载(之前是 150MB)过大会导致启动慢,rebase/binding 时间长除去商店中 App 的简介、截图,很多用户都会关注 App 的大小,尤其是使用空间为 8G、16G 的用户安装包大小的优化,主要包含两大块:资源大小的... 阅读全文
posted @ 2020-02-26 13:42
和风细羽
阅读(787)
评论(0)
推荐(0)
摘要:
在 WWDC 2016 上首次提到了关于 App 应用启动速度优化的话题:Session 406 Optimizing App Startup Time。一、冷启动与热启动热启动是,APP会恢复之前的状态继续运行,这种就是热启动,我们平时所说的APP在后台的存活时间,其实就是APP能执行热启动的最大时间间隔。而冷启动则是APP从被加载到内存到运行的状态,下面我们要讲的主要是冷启动。热启动:由于某种... 阅读全文
posted @ 2020-02-26 13:42
和风细羽
阅读(1584)
评论(0)
推荐(1)
摘要:
用 ARC 管理内存在正确的地方使用 reuseIdentifier尽量把 views 设置为完全不透明如果你有透明的 Views 你应该设置它们的 opaque(不透明)属性为 YES。例如一个黑色半透明的可以设置为一个灰色不透明的 View 替代。原因是这会使系统用一个最优的方式渲染这些 views。这个简单的属性在 IB 或者代码里都可以设定。Apple的文档对于为图片设置透明属性的描述是:... 阅读全文
posted @ 2020-02-26 13:41
和风细羽
阅读(494)
评论(0)
推荐(0)
摘要:
前言iOS性能优化系列篇之“优化总体原则”不要提前过度优化要找到性能瓶颈要在不同性能指标间权衡要理解优化任务的底层运行机制要有技术保障体系一、启动速度优化1.1 学习文章WWDC 启动速度优化视频 Session 406 Optimizing App Startup TimeiOS性能(二) 启动时间优化1.2 操作步骤查看启动时间配置 Xcode 环境变量在日志中打印启动时间:打开工程 -> E... 阅读全文
posted @ 2020-02-26 13:41
和风细羽
阅读(1325)
评论(0)
推荐(0)
摘要:
通常设置圆角方式imageView.clipsToBounds = YES;imageView.layer.cornerRadius = 50;这样设置会触发离屏渲染,比较消耗性能。比如当一个页面上有十几个头像,这样设置了圆角会明显感觉到卡顿。注意:UIImageView 处理png 图片的圆角是不会产生离屏渲染的。(iOS9.0 之后不会离屏渲染,iOS9.0 之前还是会离屏渲染)。一、设置圆... 阅读全文
posted @ 2020-02-26 13:41
和风细羽
阅读(1009)
评论(0)
推荐(0)
摘要:
一、屏幕显示图像的原理首先从过去的 CRT 显示器原理说起。CRT 的电子枪按照上面方式,从上到下一行行扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次扫描。为了把显示器的显示过程和系统的视频控制器进行同步,显示器(或者其他硬件)会用硬件时钟产生一系列的定时信号。当电子枪换到新的一行,准备进行扫描时,显示器会发出一个水平同步信号(horizonal synchronizati... 阅读全文
posted @ 2020-02-26 13:40
和风细羽
阅读(454)
评论(0)
推荐(0)
摘要:
iOS 性能调试instrumentInstrumentInstrument之Core Animation工具避免图层混合①、确保控件的opaque属性设置为true,确保backgroundColor和父视图颜色一致且不透明;②、如无特殊需要,不要设置低于1的alpha值;③、确保UIImage没有alpha通道;避免临时转换①、确保图片大小和frame一致,不要在滑动时缩放图片;②、确保图片颜... 阅读全文
posted @ 2020-02-26 13:39
和风细羽
阅读(236)
评论(0)
推荐(0)
摘要:
一、屏幕显示图像原理首先明确两个概念:水平同步信号、垂直同步信号。CRT 的电子枪按照上图中的方式,从上到下一行一行的扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次的扫描。当电子枪切换到新的一行准备扫描时,显示器会发送一个水平同步信号(Horizonal Synchronization),简称HSync;完成一帧画面绘制后,电子枪会回到原位,显示器会发送一个垂直同步信号(V... 阅读全文
posted @ 2020-02-26 13:39
和风细羽
阅读(239)
评论(0)
推荐(0)
摘要:
title: iOS Crashcategories: iOS优化Understanding and Analyzing Application Crash Reports稳定性APP 稳定性方面主要是减少异常及崩溃,针对这部分,可以从 Category、Method Swizzling 以及静态分析来入手。1.1 Category 分析Category可以为现有的类添加方法,但是Category... 阅读全文
posted @ 2020-02-26 13:38
和风细羽
阅读(220)
评论(0)
推荐(0)
摘要:
使用 UITableView 时,发现滚动时的性能还不错,但来回滚动时,第一次显示的图像不如再次显示的图像流畅,出现前会有稍许的停顿感。于是猜想显示过的图像肯定是被缓存起来了,查了下文档后发现果然如此。在《Improving Image Drawing Performance on iOS》一文中找到了一些提示:原来在显示图像时,解压和重采样会消耗很多 CPU 时间;而如果预先在一个 bitmap... 阅读全文
posted @ 2020-02-26 13:38
和风细羽
阅读(737)
评论(0)
推荐(0)
摘要:
一、接口请求优化在工程项目中,多个一级界面包含状态,如:服务入口的动态配置,未读消息数量,图片文字等,因此产品设计要每次切换 tab 时都请求数据,及时的更新页面状态。在实际开发中,频繁的调用接口,频繁的刷新界面显然是影响用户体验的,所以需要进行优化,优化的思路有以下几点:使用 loading + 默认灰色矩形视图;每隔 15s 以上才请求一次,防止频繁触发请求@property (nonatom... 阅读全文
posted @ 2020-02-26 13:38
和风细羽
阅读(277)
评论(0)
推荐(0)
摘要:
一、Cell 复用在可见的页面会重复绘制页面,每次刷新显示都会去创建新的 Cell,非常耗费性能。解决方案:创建一个静态变量 reuseID,防止重复创建(提高性能),使用系统的缓存池功能。static NSString * CELL_RUID = @"CELL"; // 调用次数太多,static 保证只创建一次 reuseID,提高性能- (UITableViewCell *)tableV... 阅读全文
posted @ 2020-02-26 13:37
和风细羽
阅读(896)
评论(0)
推荐(0)
摘要:
一、探究NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];[dateFormatter setDateFormat:@"yyyy-MM-dd"];NSString * current = [dateFormatter stringFromDate:[NSDate date]];关于 NSDateFormatter 创建... 阅读全文
posted @ 2020-02-26 13:37
和风细羽
阅读(889)
评论(0)
推荐(0)
摘要:
一、图片显示图片的显示分为三步:加载、解码、渲染。解码和渲染是由 UIKit 进行,通常我们操作的只有加载。以 UIImageView 为例。当其显示在屏幕上时,需要 UIImage 作为数据源。UIImage 持有的数据是未解码的压缩数据,能节省较多的内存和加快存储。当 UIImage 被赋值给 UIImage 时(例如 imageView.image = image;),图像数据会被解码,变成... 阅读全文
posted @ 2020-02-26 13:36
和风细羽
阅读(1070)
评论(0)
推荐(0)
摘要:
一、Crash类型crash 一般产生自 iOS 的微内核 Mach,然后在 BSD 层转换成 UNIX SIGABRT 信号,以标准 POSIX 信号的形式提供给用户。NSException 是使用者在处理 App 逻辑时,用编程的方法抛出。iOS 端的 crash 分为三类:Mach 异常:EXC_CRASHUNIX 信号:SIGABRT系统崩溃而引起的程序 NSException 异常退出常... 阅读全文
posted @ 2020-02-26 13:36
和风细羽
阅读(1245)
评论(0)
推荐(0)
摘要:
代码的组织结构,以及为何要这样写。那些场景适合使用子控制器,那些场景应该避免使用子控制器?分离UITableView的数据源和UITableViewDataSource协议。MVVM的重点是ViewModel,不是响应函数式。MVVM中,ReactiveCocoa或RXSwift实现数据绑定的带来的弊端。用策略模式替代if-else或switch这样判断比较多,不利于代码阅读的分支结构。并在特定场... 阅读全文
posted @ 2020-02-26 13:36
和风细羽
阅读(493)
评论(0)
推荐(0)
摘要:
NSProxy 是一个实现了 NSObject 协议类似于 NSObject 的根类。NS_ROOT_CLASS@interface NSProxy { Class isa;}苹果的官方文档:Typically, a message to a proxy is forwarded to the real object or causes the proxy to load (or tra... 阅读全文
posted @ 2020-02-26 13:32
和风细羽
阅读(737)
评论(0)
推荐(0)
摘要:
阅读全文
posted @ 2020-02-26 13:32
和风细羽
阅读(1407)
评论(0)
推荐(0)
摘要:
官方的解释:The NSPredicate class is used to define logical conditions used to constrain a search either for a fetch or for in-memory filtering.NSPredicate 类是用来定义逻辑条件,用来有约束的获取内存中的对象或过滤搜索。简而言之:只选取符合条件的对象。一、基... 阅读全文
posted @ 2020-02-26 13:31
和风细羽
阅读(494)
评论(0)
推荐(0)
摘要:
一、NSDictionary 1.1 使用自定义对象 key Dictionaries manage pairs of keys and values. A key value pair within a dictionary is called an entry. Each entry consi 阅读全文
posted @ 2020-02-26 13:31
和风细羽
阅读(742)
评论(0)
推荐(0)
摘要:
一、简介C++ 是基于静态类型,而 Objective-C 是基于动态运行时类型。用 C++ 编写的程序通过编译器直接把函数地址硬编码进入可执行文件;Objective-C 则不能,而是在程序运行的时,利用 Runtime 根据条件判断作出决定。函数标识与函数实现之间的关联可以动态修改。OC 把一些决定工作从编译链接推迟到运行时,有很多类和成员变量在编译时是不知道的,而在运行时,编写的代码会转换成... 阅读全文
posted @ 2020-02-26 13:30
和风细羽
阅读(860)
评论(0)
推荐(1)
摘要:
一、umbrella framework将几个已经封装好的 framework 封装成一个,封装的这种 framework 就是 umbrella framework。Apple 的官方文档中明确提到了不建议自己去创建 umbrellaframework。首先先引入 Apple 的 Guidelins for Creating Frameworks 的一段:Don’t Create Umbrell... 阅读全文
posted @ 2020-02-26 13:30
和风细羽
阅读(844)
评论(0)
推荐(0)
摘要:
Lexical or Preprocessor Issue Umbrella header for module 'xxx' does not include header 'xxx.h' framework 的文件明明被主工程引用了,但是在编译的时候依旧抛出上面的警告。 一、什么是 umbrell 阅读全文
posted @ 2020-02-26 13:30
和风细羽
阅读(2049)
评论(0)
推荐(0)
摘要:
身份证识别,又称 OCR 技术。OCR 技术是光学字符识别的缩写,是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。一、实现原理及步骤灰度化处理将指定图片每个像素点的 RGB 三个分量通过一定的算法计算出该像素点的灰度值,使图像只含亮度而不含色彩信息。二值化将经过灰度化处理的图片转换为只包含黑色和白色两... 阅读全文
posted @ 2020-02-26 13:29
和风细羽
阅读(676)
评论(0)
推荐(0)
摘要:
Xcode6 之前会在 Supporting Files 文件夹下自动生成一个“工程名-PrefixHeader.pch”的预编译头文件,pch 头文件的内容能被项目中的其他所有源文件共享和访问。Xcode 6.0之后则需要手动创建。一、作用①、定义全局性宏;②、引用全局性头文件;③、根据运行环境,自动打开或者关闭日志输出功能。二、优点①、PCH 文件的内容能被项目中的其他所有文件共享和访问,其它... 阅读全文
posted @ 2020-02-26 13:29
和风细羽
阅读(583)
评论(0)
推荐(0)
摘要:
一、常规文件操作 常规文件操作(read/write)有那几个重要步骤: 进程发起读文件请求 内核通过查找进程文件符表,定位到内核已打开文件集上的文件信息,从而找到此文件的 inode inode 在 address_space 上查找要请求的文件页是否已经缓存在内核页高速缓冲中。如果存在,则直接返 阅读全文
posted @ 2020-02-26 13:28
和风细羽
阅读(1534)
评论(0)
推荐(0)
摘要:
一、前言1.1 程序和进程广义上的程序就是一个静态的可执行文件,是由一个已经编译好的指令和数据集合的一个文件。就像通过 Xcode 编译好的 Mach-O 文件。而进程则是一个动态的概念,是程序的运行时的一个过程。1.2 虚拟内存每个进程内部都是使用的逻辑地址空间,这个逻辑地址与物理 RAM 之间存在着映射关系,这个映射是以 page 为单位的。这种映射关系不一定是 1 对 1 的,有可能某个逻辑... 阅读全文
posted @ 2020-02-26 13:28
和风细羽
阅读(795)
评论(0)
推荐(0)
摘要:
如何重写 hash 方法一个合理的 hash 方法要尽量让 hash 表中的元素均匀分布,来保证较高的查询性能。如果两个对象可以被视为同一个对象,那么他们的 hash 值要一样。mattt 在文章 Equality 中给出了一个普遍的算法:- (NSUInteger)hash { // 假设对象有三个属性,那么对这三个属性分别算出 hash 值,然后进行异或运算 return [sel... 阅读全文
posted @ 2020-02-26 13:27
和风细羽
阅读(442)
评论(0)
推荐(0)
摘要:
HOOK 译为“钩子”或挂钩。在 iOS 逆向中指改变程序运行流程的一种技术。iOS 中 hook 技术的几种方式Method Swizzle利用 OC 的 Runtime 特性,动态改变 SEL(方法编号)和 IMP(方法实现)的对应关系,达到 OC 方法调用流程改变的目的。主要用于 OC 方法。fishhook它是 Facebook 提供的一个动态修改链接 mach-O 文件的工具。利用 Ma... 阅读全文
posted @ 2020-02-26 13:26
和风细羽
阅读(2770)
评论(2)
推荐(0)
摘要:
一、Runtime 简介Runtime 又叫运行时,是一套底层的 C 语言 API,是 iOS 系统的核心之一。开发者在编码过程中,可以给任意一个对象发送消息,在编译阶段只是确定了要向接收者发送这条消息,而接受者将要如何响应和处理这条消息,那就要由运行时来决定了。C 语言中,函数的调用在编译期就会决定调用哪个函数。而 OC 的函数属于动态调用过程,在编译期并不能决定真正调用哪个函数,只有在真正运行... 阅读全文
posted @ 2020-02-26 13:26
和风细羽
阅读(1056)
评论(0)
推荐(0)
摘要:
一、iOS hash下图列出 Hash 在 iOS 中的应用分析整理知乎上的一句话:算法、数据结构、通信协议、文件系统、驱动等,虽然自己不写那些东西,但是了解其原理对于排错、优化自己的代码有很大帮助,就好比虽然你不设计制造汽车,但如果你了解发动机、变速器、安全气囊等几项原理,对于你驾车如何省油、延长使用寿命、保证自身安全有很大好处,学而不思则罔、思而不学则殆,开发人员就是个随波而进的行业,无论何时... 阅读全文
posted @ 2020-02-26 13:25
和风细羽
阅读(1448)
评论(0)
推荐(0)
摘要:
一、CoreGraphics这是一个 C 语言写就的库,来看看他的头文件:#ifndef COREGRAPHICS_H_#define COREGRAPHICS_H_#include #include #include #include #include #include #include #include #include #include #include #include #include ... 阅读全文
posted @ 2020-02-26 13:24
和风细羽
阅读(582)
评论(0)
推荐(0)
摘要:
一、mach-OExecutable 可执行文件Dylib 动态库Bundle 无法被连接的动态库,只能通过 dlopen() 加载Image 指的是 Executable,Dylib 或者 Bundle 的一种。Framework 动态库和对应的头文件和资源文件的集合Apple 出品的操作系统的可执行文件格式几乎都是 mach-O。mach-O 可以大致分为三部分:Header 头部,包含可以执... 阅读全文
posted @ 2020-02-26 13:23
和风细羽
阅读(792)
评论(0)
推荐(0)
摘要:
一、密码学简介1.1 base64Base64 是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。Base64 适用于小段内容的编码,比如数字证书签名、Cookie 的内容等。由于 = 字符也可能出现在 Base64 编码中,但 = 用在 URL、Cookie 里面会造成歧义,所以,很多Base64编码后会把 = 去掉,解码时,需要加上 = 把 Base64 字符串的长度变为 ... 阅读全文
posted @ 2020-02-26 13:22
和风细羽
阅读(838)
评论(0)
推荐(0)
摘要:
一、简介OC在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针。OC在内存管理上采用了引用计数,它是一个简单而有效管理对象生命周期的方式。在对象内部保存一个用来表示被引用次数的数字,init、new和copy都会让计数+1,调用release让计数-1。当计数等于0的时候,系统调用dealloc方法来销毁对象。A * a = [[A alloc] init];... 阅读全文
posted @ 2020-02-26 13:21
和风细羽
阅读(1209)
评论(1)
推荐(0)
摘要:
一、前言在开发过程中,可能遇到服务端返回数据中有 null,当取到 null 值并对 null 发送消息的时候,就可能出现 unrecognized selector sent to instance,导致应用 crash 的情况。针对这种情况,在每次取值的时候去做判断处理又不大合适,在 GitHub上发现了 NullSafe。把这个文件拖到项目中,即使出现 null 的情况,也不会报出 unr... 阅读全文
posted @ 2020-02-26 13:21
和风细羽
阅读(417)
评论(0)
推荐(0)
摘要:
一、Apple开发者账号1.1 开发者账号类型个人级公司级企业级公司和企业的可多人协作。在苹果的开发者平台登录后,可在 People 界面邀请其他人员协作开发,邀请的人需要注册一个 appleId 账号,并且可以设置开发人员的权限。1.2 辨别账号类型个人级账户的 Apple Developer Program 下方只有 Certificates,identifiers & Profiles 和 ... 阅读全文
posted @ 2020-02-26 13:20
和风细羽
阅读(885)
评论(0)
推荐(0)
摘要:
一、UIResponderapp 使用响应者对象接收和处理事件,只有继承 UIResponder 的类,才能处理事件。UIApplication、UIView、UIViewController 都是继承自 UIResponder 类,可以响应和处理事件。CALayer 继承自 NSObject,不是 UIResponder 的子类,无法处理事件。响应者接收到原始事件数据,必须处理事件或者转发到另一... 阅读全文
posted @ 2020-02-26 13:19
和风细羽
阅读(517)
评论(0)
推荐(0)
摘要:
一、推送原理当用户打开应用程序的通知中心之后,苹果远程推送服务器就能把消息推送到装有该应用的设备上,具有强制性、实时性的特点,并且用户无需打开应用都能收到推送的消息。1.1 名词介绍Provider:消息提供者,一般是我们的后台服务器或者第三方推送服务器后台APNs(Apple Push Notification service):苹果推送通知服务。APNs Server(Apple Push N... 阅读全文
posted @ 2020-02-26 13:18
和风细羽
阅读(2318)
评论(0)
推荐(0)
摘要:
对于iOS程序员来说,内存管理是入门的必修课。引用计数、自动释放等概念,都是与C语言完全不同的。iOS内存管理的核心是引用计数。接触MRC时遇到最头疼的问题就是:为什么那么多release?什么地方需要release?同样初始化一个字符串的两个方法为什么不同,上边一个不需要调用release,后边一个就需要调用release?NSString * str1 = [NSStri... 阅读全文
posted @ 2020-02-26 13:18
和风细羽
阅读(400)
评论(0)
推荐(0)
摘要:
RAM ROMRAM:运行内存,不能掉电存储。ROM:存储性内存,可以掉电存储,例如内存卡、Flash。由于 RAM 类型不具备掉电存储能力(即一掉电数据消失),所以 app 程序一般存放于 ROM 中。RAM 的访问速度要远高于 ROM,价格也要高。App程序启动App 程序启动,系统会把开启的那个 App 程序从 Flash 或 ROM 里面拷贝到内存(RAM),然后从内存里面执行代码。另一个... 阅读全文
posted @ 2020-02-26 13:17
和风细羽
阅读(880)
评论(0)
推荐(0)
摘要:
一、类簇类簇是 Foundation 框架广泛使用的设计模式。类簇在公共抽象超类下对多个私有的具体子类进行分组。以这种方式对类进行分组简化了面向对象框架的公共可见体系结构,而不会降低其功能丰富度。类簇是基于抽象工厂设计模式的。二、抽象工厂抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。很... 阅读全文
posted @ 2020-02-26 13:17
和风细羽
阅读(997)
评论(0)
推荐(1)
摘要:
一、库1.1 什么是库?库就是程序代码的集合,将 N 个文件组织起来,是共享程序代码的一种方式。从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。1.2 库的分类根据程序代码的开源情况,库可以分为两类开源库源代码是公开的,你可以看到具体实现。比如知名的第三方框架:AFNetworking、SDWebImage。闭源库不公开源代码,只公开调用的接口,看不到具体的实现,是一个编译后的二进... 阅读全文
posted @ 2020-02-26 11:36
和风细羽
阅读(2052)
评论(0)
推荐(0)
摘要:
一、静态和动态在项目中使用 pod 实现模块化,对于子模块和第三类库的导入方式存在两种:静态库、动态库。当在 podfile 中指定 use_frameworks! 时,子模块和第三方类库将被打包成 .framework 动态库,模块之间的代码不能直接引用,需要添加依赖;反之(默认情况)将打包成 .a 静态库。动态库和静态库的区别:资源加载方式包的大小 编译速度1.1 资源加载方式s.depend... 阅读全文
posted @ 2020-02-26 11:35
和风细羽
阅读(680)
评论(0)
推荐(0)
摘要:
一、MVCMVC 全名 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC 被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中... 阅读全文
posted @ 2020-02-26 11:34
和风细羽
阅读(291)
评论(0)
推荐(0)
摘要:
一、.a 文件静态库打包打开 Xcode 创建一个新的 Static Library 工程,取名 MyStaticLibrary。创建工程完毕后,系统自动创建了一个同名类,添加一个方法用于测试。#import @interface MyStaticLibrary : NSObject+ (void)test;@end@implementation MyStaticLibrary+ (void)te... 阅读全文
posted @ 2020-02-26 11:33
和风细羽
阅读(787)
评论(0)
推荐(0)
摘要:
一、继承 不恰当的使用继承导致的最大的一个特征就是高耦合。 是否使用继承需要考虑三个点: 父类只是给子类提供服务,并不涉及子类的业务逻辑 层级关系明显,功能划分清晰,父类和子类各做各的。 父类的所有变化,都需要在子类中体现,也就是说此时耦合已经成为需求 万不得已不要用继承,优先考虑组合等方式。 如果 阅读全文
posted @ 2020-02-26 11:33
和风细羽
阅读(348)
评论(0)
推荐(0)
摘要:
一、构建步骤创建一个动态库 MyDynamicFramework创建一个测试类在 MyDynamicFramework.h(默认生成,可统一暴露头文件) 中 #import "Person.h"#import //! Project version number for MyDynamicFramework.FOUNDATION_EXPORT double MyDynamicFrameworkVe... 阅读全文
posted @ 2020-02-26 11:31
和风细羽
阅读(1922)
评论(1)
推荐(0)
摘要:
一、单例介绍单例:该类在程序运行期间有且仅有一个实例。1.1 单例模式的要点该类有且只有一个实例;该类必须能够自行创建这个实例;该类必须能够自行向整个系统提供这个实例。1.2 单例的主要优点单例可以保证系统中该类有且仅有一个实例,确保所有对象都访问这个唯一实例;因为类控制了实例化过程,所以类可以灵活更改实例化过程;基于第 1 条,对于项目中的个别场景的传值、存储状态等业务更加方便;可以节约系统资源... 阅读全文
posted @ 2020-02-26 11:28
和风细羽
阅读(1322)
评论(0)
推荐(0)
摘要:
一、iOS 系统架构层次 在 iOS 中,框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源。共享资源库定义应用程序可以调用的函数和方法。 iOS 为应用程序开发提供了许多可使用的框架,并构成 iOS 操作系统的层次架构,分为四层: Cocoa To 阅读全文
posted @ 2020-02-26 11:26
和风细羽
阅读(2003)
评论(0)
推荐(0)
摘要:
一、前言一般可以将编程语言分为两种,编译语言和直译式语言。像 C++、Objective-C 都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在 CPU 上执行,所以执行效率较高。像 JavaScript、Python 都是直译式语言。直译式语言不需要经过编译的过程,而是在执行的时候通过一个中间的解释器将代码解释为 CPU 可以执行的代码。所以,较编译语言来说,直译式... 阅读全文
posted @ 2020-02-26 11:22
和风细羽
阅读(586)
评论(0)
推荐(0)
摘要:
Objective C 中的 Category 是对装饰模式的一种具体实现。它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。 分类可以拓展类的属性、方法、协议等信息 一、使用场景 根据苹果官方文档对 Category 的描述,它的使用场景主要有三个: 1. 给现有的类添加方法; 2 阅读全文
posted @ 2020-02-26 11:16
和风细羽
阅读(1435)
评论(0)
推荐(0)
摘要:
你不需要自己创建 CTRun。CoreText 将根据 NSAttributedString 的属性来自动创建 CTRun。每个 CTRun 对象对应不同的属性,正因此,你可以自由的控制字体、颜色、字间距等等信息。通常步聚:使用 core text 就是先有一个要显示的 string然后定义这个 string 每个部分的样式 attributedString生成 CTFramesetter得到 C... 阅读全文
posted @ 2020-02-26 11:15
和风细羽
阅读(486)
评论(0)
推荐(0)
摘要:
一、介绍在 MacOS 和 iOS 上,可执行程序的启动依赖于 xnu 内核进程运作和动态链接加载器 dyld。dyld 全称 the dynamic link editor,即动态链接器,其本质是 Mach-O 文件,是专门用来加载动态库的库。源码下载地址:https://opensource.apple.com/tarballs/dyld/当点击 App 的时候,系统在内核态完成一些必要配置,... 阅读全文
posted @ 2020-02-26 11:14
和风细羽
阅读(3625)
评论(0)
推荐(0)
摘要:
一、什么是闭包在 wikipedia 上,闭包的定义是:In programming languages, a closure is a function or reference to a function together with a referencing environment—a table storing a reference to each of the non-local va... 阅读全文
posted @ 2020-02-26 11:11
和风细羽
阅读(1208)
评论(0)
推荐(0)
摘要:
一、前言苹果在 WWDC2015 大会上引入了 bitcode,随后在 Xcode7 中添加了在二进制中嵌入 bitcode(Enable Bitcode) 的功能,并且默认设置为开启状态。在What is app thinning? (iOS, tvOS, watchOS)一节中有以下定义:Bitcode is an intermediate representation of a comp... 阅读全文
posted @ 2020-02-26 11:03
和风细羽
阅读(1808)
评论(0)
推荐(0)
摘要:
一、什么是自动释放池OC 中的一种内存自动回收机制,它可以延迟加入 AutoreleasePool 中的变量 release 的时机,即当我们创建了一个对象,并把它加入到了自动释放池中时,它不会立即被释放,会等到一次 runloop 结束或者作用域超出 {} 或者超出 [pool release] 之后再被释放。二、自动释放池的创建与销毁时机MRC:NSAutoreleasePool * pool... 阅读全文
posted @ 2020-02-26 10:59
和风细羽
阅读(244)
评论(0)
推荐(0)
摘要:
atomic在set方法里加了锁,防止了多线程一直去写这个property,造成难以预计的数值。当属性使用atomic修饰时,它的读和写是原子性的:当线程A进行写操作,这时其他线程的读或者写操作会因为该操作而等待。当A线程的写操作结束后,B线程进行写操作,然后当A线程需要读操作时,获得了在B线程中修改的值。如果有C线程在A线程读操作之前release 了该属... 阅读全文
posted @ 2020-02-26 10:57
和风细羽
阅读(934)
评论(0)
推荐(0)

浙公网安备 33010602011771号