代码改变世界

随笔分类 -  iOS

Objective-C 方法交换实践(三) - Aspects 源码解析

2018-06-12 19:20 by v2m, 1001 阅读, 收藏, 编辑
摘要: 一、类与变量 AspectOptions typedef NS_OPTIONS(NSUInteger, AspectOptions) { AspectPositionAfter = 0, /// 原方法之后 (default) AspectPositionInstead = 1, /// 替换原方法 阅读全文

iOS 中系统与 SDK 版本检测

2018-05-29 17:15 by v2m, 1799 阅读, 收藏, 编辑
摘要: 一、编译时检测 1. 判断 SDK 是否是某个版本或更高版本 2.判断当前需要支持的最低版本 ​ 这个宏的取值也就是 这个值,也就是你的工程支持的最低系统版本。但是最少是 __IPHONE_2_0。 3.判断最高可支持的系统版本 这个宏的值等于当前 SDK 定义的最高版本,比如 \__IPHONE_ 阅读全文

源码阅读-GlobalTimer

2018-03-17 17:29 by v2m, 790 阅读, 收藏, 编辑
摘要: 最近看到一篇文章推了一个开源项目, "GlobalTimer" 。主要是可以用一个定时器来统一管理多个定时任务,可以针对特定任务进行管理。 一、原理 1.一个公共的timer 2.封装任务到自定义个Event中,保留任务的执行代码与数据,时间信息等 3.计算所有任务间隔的最大公约数x,用这个x作为t 阅读全文

iOS 的音频播放

2018-03-15 19:15 by v2m, 1247 阅读, 收藏, 编辑
摘要: 一、Audio Toolbox 1.使用代码 import AudioServicesPlaySystemSound(1106); 2.如果想用自己的音频文件创建系统声音来播放的同学可以参考如下代码。 //Get the filename of the sound file: NSString pa 阅读全文

iOS 影音新格式 HEIF HEVC

2017-11-27 16:26 by v2m, 2340 阅读, 收藏, 编辑
摘要: 苹果在 iOS 11 的发布会上,推出了两种新的媒体格式 `HEVC`,都是为了保证画质的情况下,大大减少视频、照片的大小。 一、简介 全称 High Efficiency Video Coding(高效率视频编码),是比H.264更加优秀的一种视频压缩标准(也称为 H.265)。HEVC 在低码率 阅读全文

Objective-C 方法交换实践(二) - 方法指针交换

2017-11-21 00:49 by v2m, 1823 阅读, 收藏, 编辑
摘要: 一. 基本函数 1. 根据 sel 得到 class 的实例方法 2. 根据 sel 得到 class 的函数指针 3. 给 class 添加方法 4. 替换 class 的 sel 对应的函数指针,返回值为 sel 对应的原函数指针 5. 交换两个 method 6. 直接替换 method 的函 阅读全文

Objective-C 方法交换实践(一) - 基础知识

2017-11-20 23:54 by v2m, 1050 阅读, 收藏, 编辑
摘要: 一、Objective C 中的基本类型 首先看下 Objective C 的对象模型,每个 Objective C 对象都是一个指向 Class 的指针。Class 的结构如下: struct objc_class { Class _Nonnull isa OBJC_ISA_AVAILABILIT 阅读全文

iOS 中架构模式的浅显理解

2017-08-04 00:39 by v2m, 1294 阅读, 收藏, 编辑
摘要: 我们开发软件中应用各种模式,主要是为了 1. 职责划分:一个类只做一件事 2. 易用,可维护,方便扩展 3. 解耦,相互独立,可单独测试 各种设计模式其实都是在解决上面的问题,让我们对比看看吧。 一、如何理解MVC设计模式 在通常的定义中,MVC 是下图的结构 但是在 cocoa 体系中,苹果建议的 阅读全文

Block 在 ARC 下的拷贝

2017-07-25 16:43 by v2m, 950 阅读, 收藏, 编辑
摘要: 前言 现在有一种说法,是开启arc选项时,已经没有栈上的block了,所以所有的block都不需要copy来拷贝到堆上了。那么这个说法正确与否呢? 结论是这个说法必须是错误的,首先的一点就是arc只是编译器帮助我们给对象自动增加retain,release方法,我们不需要手动的去管理这些成对出现的内 阅读全文

iOS 中的正则表达式符号

2017-04-25 14:55 by v2m, 723 阅读, 收藏, 编辑
摘要: 最近重新看了一遍 iOS 的正则文档,简单翻译下文档中涉及到的符号 1.正则表达式元字符 | 符号 | 说明 | | | | | \a | 响铃, \u0007 | | \A | 匹配输入的开始,只匹配第一行,也就是忽略多行选项 | | \b | 不在[]包含时,匹配单词的边界,也就是\w和\W的中 阅读全文

iOS 库 开发小结

2017-04-12 20:34 by v2m, 982 阅读, 收藏, 编辑
摘要: 1.基本用法 定义类,导出头文件,注意头文件,库文件的search path 2.加载资源 使用主工程的文件,耦合性太强 封装到NSBundle中 NSBundle可以封装xib storyboard assets 对于png文件bundle 对于 不同scale的png文件会默认合并成tiff文件 阅读全文

发布自定义模块的方式

2017-02-06 23:37 by v2m, 458 阅读, 收藏, 编辑
摘要: 最近开源了一个 "重按手势识别" 的类,顺便研究了一下如何发布到现有的第三方代码仓库中,记录了一下主要流程。 一、CocoaPods 1. 打tag CocoaPods依赖仓库的tag去拉取对应的代码,所以在完成了本地的开发后,需要提交一个正确的版本,打上对应的tag。 2. 创建说明文件 这会生成 阅读全文

3D Touch初探

2017-01-20 23:17 by v2m, 495 阅读, 收藏, 编辑
摘要: 伴着6S的发布,iOS 9.0开始支持3D Touch功能。使用场景来分一共有三种情况。 一、基于UIViewController的扩展 1. 首先要注册需要监听重按手势的 source view: 2. 重按手势识别出来之后需要按照 协议去处理 peek 和 pop 事件,这个协议有两个方法 3. 阅读全文

一像素宽的竖线

2017-01-15 23:52 by v2m, 980 阅读, 收藏, 编辑
摘要: 设计师很多时候会有一像素线的需求,怎么去实现有下面几种方法。 一、 Image 1. 资源图片 找设计师要个图片,用UIImageView 或者 CALayer的方式显示出来 2. CoreGraphics绘制 用CoreCraphics的方式画一个 UIImage,然后用1的方法展示出来 此类方法 阅读全文

iOS URL 编码

2017-01-08 01:26 by v2m, 773 阅读, 收藏, 编辑
摘要: 一、iOS 中的NSURL编码 iOS 中,NSURL 的基本样式是 "RFC 1738" 规定: Thus, only alphanumerics, the special characters "$ _.+! '(),", and reserved characters used for the 阅读全文

macOS 我的装机

2017-01-06 16:47 by v2m, 411 阅读, 收藏, 编辑
摘要: 最近多次配置 Mac 的开发环境,稍微记录一下 1 创建无付费信息的 "Apple ID" 2 Xcode ​ "gem 源更改" 3 "Alfred" 4 "微信" 5 "SourceTree" 6 "Sublime Text" "Package Control" PrettyJSON 7 "Ev 阅读全文

iOS 方法修饰符

2016-11-26 15:43 by v2m, 1448 阅读, 收藏, 编辑
摘要: 一、NS_DESIGNATED_INITIALIZER 用来修饰init方法,被修饰的方法称为designated initializer;没有被这个修饰的init方法称为convenience initializer 参考1对之的说明为 解释下就是 补充点 1.继承性,当子类里面没有其他的init 阅读全文

iOS7 NavigationController 手势问题

2014-01-15 21:29 by v2m, 4197 阅读, 收藏, 编辑
摘要: 在iOS7中,如果使用了UINavigationController,那么系统自带的附加了一个从屏幕左边缘开始滑动可以实现pop的手势。但是,如果自定义了navigationItem的leftBarButtonItem,那么这个手势就会失效。解决方法有很多种 1.重新设置手势的delegateself.navigationController.interactivePopGestureRecognizer.delegate = (id)self; 2.当然你也可以自己响应这个手势的事件[self.navigationController.interactivePopGestureRecog.. 阅读全文

CGAffineTransform 放射变换

2013-05-09 22:48 by v2m, 4311 阅读, 收藏, 编辑
摘要: 矩阵乘法A B相乘要A的列数等于B的行数才有定义,结果是一个 A行B列的矩阵C,C的每个元素值为A对应的行与B对应的列的元素乘积的和具体看这里原理CGAffineTransformCGAffineTransform 的结构如下struct CGAffineTransform { CGFloat a; CGFloat b; CGFloat c; CGFloat d; CGFloat tx; CGFloat ty;};typedef struct CGAffineTransform CGAffineTransform;它其实表示的是一个矩阵因为最后一列总是是(0,0,1),... 阅读全文

NSRunLoop的一点理解

2013-01-06 01:27 by v2m, 7534 阅读, 收藏, 编辑
摘要: 一、类定义 + (NSRunLoop *)currentRunLoop 如果调用的线程中没有runloop,那么将会创建一个并返回 + (NSRunLoop *)mainRunLoop 返回主线程的runloop - (void)acceptInputForMode:(NSString *)mode beforeDate:(NSDate *)limitDate 运行loop一次或者直到limitDate。如果没有input sources加入到这个loop,那么马上返回;否则一直运行到limitDate,或者接口到一个input source然后返回。 - (v... 阅读全文