摘要: NSCharacter​Set 和 NSMutableCharacterSet 用面向对象的方式来表示一组Unicode字符,它经常与NSString及NSScanner组合起来使用,在不同的字符上做过滤、删除或者分割操作。为了给你提供这些字符是哪些字符的直观印象,请看看NSCharacterSet 阅读全文
posted @ 2016-06-12 15:06 马在路上 阅读(1087) 评论(0) 推荐(0) 编辑
摘要: 前边3篇介绍了YYClassinfo 文件的组成单元,算是功能的分割,按照业务的设计思想来说,方向应该是相反的 由此引申出我们在设计api的思想其实和项目管理是很类似的 一些题外话 1.目的 回到代码,首先应该明确写这个类的目的是什么? 按照正常逻辑,我们需要一个类来获取我们所需要的所有和此类相关的 阅读全文
posted @ 2016-06-04 13:32 马在路上 阅读(655) 评论(0) 推荐(0) 编辑
摘要: 目前在 iOS 和 OS X 中有两套先进的同步 API 可供我们使用:NSOperation 和 GCD 。其中 GCD 是基于 C 的底层的 API ,而 NSOperation 则是 GCD 实现的 Objective-C API。 虽然 NSOperation 是基于 GCD 实现的, 但是 阅读全文
posted @ 2016-05-28 09:48 马在路上 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 1、CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/CryptoSwift 2、Kingfisher Kingfisher 是一个异步下载和缓存图片的库 类似于S 阅读全文
posted @ 2016-05-25 10:48 马在路上 阅读(615) 评论(0) 推荐(0) 编辑
摘要: 上边代码通过创建Ivar(成员变量)的 抽象类, 返回我们需要的关于Ivar 的信息, 通过一个初始化方法创建,接下来我们看看该方法的具体实现 ivar_getOffset函数,对于类型id或其它对象类型的实例变量,可以调用object_getIvar和object_setIvar来直接访问成员变量 阅读全文
posted @ 2016-05-23 16:09 马在路上 阅读(918) 评论(0) 推荐(0) 编辑
摘要: 为了兼容Swift 中的 ? 和 ! oc 在6.3引入了两个新的类型注释:__nullable和__nonnull , 在字面上很好理解 可能为空, 不为空, 在上面代码中间则表示 默认的所有的属性都不能为空,这样我们在敲码的过程中只需要手写__nullable的类型就可以了 上边的代码 就涉及到 阅读全文
posted @ 2016-05-23 13:13 马在路上 阅读(1336) 评论(1) 推荐(0) 编辑
摘要: 好久之前就看到过使用Runtime解决按钮的连续点击的问题,一直觉得没啥好记录的。刚好今天旁边同时碰到这个问题,看他们好捉急而且好像很难处理,于是我先自己看看… 前面自己也学习了很多Runtime的东西,一直觉得这个按钮连续点击其实很简单,就使用Runtime交换SEL实现IMP即可,但其实没明白解 阅读全文
posted @ 2016-05-21 16:30 马在路上 阅读(1121) 评论(0) 推荐(0) 编辑
摘要: __has_include 此宏传入一个你想引入文件的名称作为参数,如果该文件能够被引入则返回1,否则返回0。 拓展: #include / #import 语句有两种方式包含头文件,分别是使用双引号" "与左右尖括号< >。其区别是(对于不是使用完全文件路径名的)头文件的搜索顺序不同 使用双引号" 阅读全文
posted @ 2016-05-21 16:01 马在路上 阅读(3442) 评论(2) 推荐(1) 编辑
摘要: 零.前言 这里没有太多的代码细节,只是探索iOS动画的基本概念,以及其抽象模型,数学基础等.我们学习一个知识的时候一般有两个部分,抽象部分和形象部分,抽象好比语言的语法,是规则,形象好比具体的句子,可以用来和别人交流的.抽象比形象难于理解,但比形象通用.其实数学中经常碰到抽象和形象的概念,比如有一系 阅读全文
posted @ 2016-05-21 10:14 马在路上 阅读(461) 评论(0) 推荐(0) 编辑
摘要: 1.吴航写的《iOS应用逆向工程 第2版》 2.《iOS 应用安全攻防实战》 3. 阅读全文
posted @ 2016-05-20 13:58 马在路上 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 本文授权转载,作者:左书祺(关注仓库,及时获得更新:iOS-Source-Code-Analyze) 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。 写在前面 阅读全文
posted @ 2016-05-19 18:22 马在路上 阅读(611) 评论(0) 推荐(1) 编辑
摘要: - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat viewHeight = scrollView.height + scrollView.contentInset.top; NSArray *cells = self.tableView.visibleCells; for (int i = 0... 阅读全文
posted @ 2016-05-13 13:49 马在路上 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆 阅读全文
posted @ 2016-05-12 13:38 马在路上 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 类扩展 (Class Extension也有人称为匿名分类) 作用: 能为某个类附加额外的属性,成员变量,方法声明 一般的类扩展写到.m文件中 一般的私有属性写到类扩展 使用格式: @interface Mitchell() //属性 //方法 @end 与分类的区别 分类的小括号中必须有名字 @i 阅读全文
posted @ 2016-05-12 11:41 马在路上 阅读(2193) 评论(0) 推荐(0) 编辑
摘要: 所有 HTTP 状态代码及其定义。 代码 指示 2xx 成功 200 正常;请求已完成。 201 正常;紧接 POST 命令。 202 正常;已接受用于处理,但处理尚未完成。 203 正常;部分信息 — 返回的信息只是一部分。 204 正常;无响应 — 已接收请求,但不存在要回送的信息。 3xx 重 阅读全文
posted @ 2016-05-12 11:13 马在路上 阅读(165) 评论(0) 推荐(0) 编辑
摘要: Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock)(int) = ^(int num) { multiplier ++;//这样就可以了 return num * 阅读全文
posted @ 2016-05-12 10:46 马在路上 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 先来简单介绍一下BlockBlock是什么?苹果推荐的类型,效率高,在运行中保存代码。用来封装和保存代码,有点像函数,Block可以在任何时候执行。 Block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样。 Block 底层实现 定义一个简单的block 我们再给a 阅读全文
posted @ 2016-05-12 10:41 马在路上 阅读(509) 评论(0) 推荐(0) 编辑
摘要: 在网络请求的时候有时有这种需求 两个接口请求数据,然后我们才能做最后的数据处理。但是因为网络请求是移步的 。我们并不知道什么时候两个请求完成 。 通常面对这样的需求会自然的想到 多线程 啊 。表现真正的技术的时刻来啦,可以使用 group 队列啊 。等队列中的请求任务都完成 ,在通知主线程处理汇总数 阅读全文
posted @ 2016-05-12 10:01 马在路上 阅读(1697) 评论(0) 推荐(0) 编辑
摘要: GCD有四个概念:串行队列、并行队列、同步、异步四者。 如下简介: 这里不仅给出了不确定性,而且也给出了确定性。对于初学者而言,有时候因为那些不确定的东西所造成的疑问会像没有闸却在疾驰的汽车一样让人惊慌失措,而“确定性”就如同这救命的车闸一样,它能让你豁然开朗。 串行队列、并行队列、同步、异步四者的 阅读全文
posted @ 2016-05-12 09:29 马在路上 阅读(580) 评论(0) 推荐(0) 编辑
摘要: 主要用到两个类:AVMediaSelectionGroup 和 AVMediaSelectionOption 调用 AVAsset对象的availableMediaCharacteristicsWithMediaSelectionOptions会返回一个数组,这个数组包含视频中备用的媒体资源,AVM 阅读全文
posted @ 2016-05-12 09:05 马在路上 阅读(1025) 评论(0) 推荐(0) 编辑
摘要: 前言: 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view、寻找最合适的view的底层实现、拦截事件的处理)->找到最合适的view后事件的处理(touches方法的重写,也就是事件的响应) 其中重点和难点是: 1.如何寻找最合适的view 阅读全文
posted @ 2016-05-08 18:07 马在路上 阅读(11397) 评论(0) 推荐(0) 编辑
摘要: 提起异步操作的序列执行,指的是有一系列的异步操作(比如网络请求)的执行有前后的依赖关系,前一个请求执行完毕后,才能执行下一个请求。 异步操作的定义 我们定义一般异步操作都是如下形式: 1 2 3 4 5 func asyncOperation(complete : ()-> Void){ //..d 阅读全文
posted @ 2016-05-07 18:07 马在路上 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的 阅读全文
posted @ 2016-05-06 14:42 马在路上 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 用Objective-C等面向对象语言编程时,"对象"(object)就是"基本构造单元"(building block)。开发者可以通过对象来存储并传递数据。在对象之间传递数据并执行任务的过程就叫做"消息传递"(Messaging)。当程序运行起来以后,为其提供相关支持的代码叫做"Objectiv 阅读全文
posted @ 2016-04-29 15:55 马在路上 阅读(709) 评论(0) 推荐(0) 编辑
摘要: 代码 阅读全文
posted @ 2016-04-29 15:21 马在路上 阅读(473) 评论(0) 推荐(0) 编辑
摘要: 几年前,一篇表述“10个Scala函数式单行代码”的文章非常受欢迎,并且随后立马出现了其他的语言版本,例如Haskell版本,Ruby版本,Groovy版本,Clojure版本,Python版本,C#版本,F#版本,CoffeeScript版本等。 我们不知道有多少人真的对这些单行代码印象深刻,但我 阅读全文
posted @ 2016-04-29 13:47 马在路上 阅读(524) 评论(0) 推荐(0) 编辑
摘要: 介绍 NSNumberFormatter 应该可以满足你对数据形式的一般需求,值得了解一下. 文/刘大帅(简书作者)原文链接:http://www.jianshu.com/p/817029422a72著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 阅读全文
posted @ 2016-04-28 14:10 马在路上 阅读(843) 评论(0) 推荐(0) 编辑
摘要: UIWebView 在实际应用中加载文件的时候,有两种情况, 1. 实行在线预览 , 2. 下载到本地,再查看 如果是第一种情况: 直接加载路径就可以了 如果是第二种情况 原理就是使用编码的方式加载本地文件 常见的MIME类型(通用型): 超文本标记语言文本 .html text/html xml文 阅读全文
posted @ 2016-04-26 17:22 马在路上 阅读(585) 评论(0) 推荐(0) 编辑
摘要: 由于FFmpeg开源框架的功能非常强大,可以播放的视频种类很多,同时添加第三方库kxmovie,实现视频播放,真的是爽爆了,因此今天来说一下关于FFmpeg在iOS手机上的一些配置过程,配置工具,还有那些巨坑,以及在配置kxmovie过程中的一些坑。 iOS编译FFmpeg 1.gas-prepro 阅读全文
posted @ 2016-04-13 09:07 马在路上 阅读(717) 评论(0) 推荐(0) 编辑
摘要: 1.开启 terminal 2.移除现有 Ruby 默认源 $ gem sources --remove https://rubygems.org/ 3.使用新的源 $ gem sources -a https://ruby.taobao.org/ 4.验证新源是否替换成功 $ gem source 阅读全文
posted @ 2016-04-05 14:01 马在路上 阅读(831) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是前两周@叶孤城叶大在微信群里面的分享,一直到这两天才翻出来研究。很多实用的东西,不过由于水平有限,有些地方没能翻译好,还请大家指正。 我已经在iOS这个最好的移动平台上有几年的开发经验了。在这期间,我已以接触过很多的iOS应用和iOS工程师。 我们的世界很多好的开发者,但有时我发现他们中的 阅读全文
posted @ 2016-04-05 11:41 马在路上 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互。 Index 演示项目 屏幕显示图像的原理 卡顿产生的原因和解决方案 CPU 资源消耗原因和解决方案 GPU 资源消耗原因和解决方案 AsyncDisp 阅读全文
posted @ 2016-04-05 11:40 马在路上 阅读(404) 评论(0) 推荐(0) 编辑
摘要: ar 命令 用途 维护链接编辑器使用的索引库。 语法 ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { -h | -p | -t | -x } [ -X {32|64|32_64}] ArchiveFile [ Fil 阅读全文
posted @ 2016-03-17 18:06 马在路上 阅读(10371) 评论(0) 推荐(0) 编辑
摘要: 最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被“坑”了,最后终于顺利的解决了。发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理解,我来深入的写一写。 Mac OS X 10.10.1 Xcode 6.1.1 (6A2008a) 阅读全文
posted @ 2016-03-17 18:05 马在路上 阅读(11297) 评论(1) 推荐(0) 编辑
摘要: 网上流传了太多关于合并lib库的方法,自己也尝试过,但大多失败。有感于这种急于解决问题,经过百般尝试后依旧无果的无奈心情,小翁在这里用一个实例来完整阐述如何在mac中合并lib静态库。 这里以移动广告平台多盟的三个lib库为例子,之所以以此为例子,是因为我也遇到了库冲突的问题,所以才有了本文的内容。 阅读全文
posted @ 2016-03-17 17:05 马在路上 阅读(643) 评论(0) 推荐(0) 编辑
摘要: 1 /** 2 * Sample React Native App 3 * https://github.com/facebook/react-native 4 */ 5 'use strict'; 6 import React, { 7 AppRegistry, 8 Component, 9 StyleSheet, 10 Text, ... 阅读全文
posted @ 2016-03-16 14:46 马在路上 阅读(1339) 评论(0) 推荐(0) 编辑
摘要: /** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; import React, { AppRegistry, Component, StyleSheet, Text, View, Image } from 'react-native'; ... 阅读全文
posted @ 2016-03-16 11:48 马在路上 阅读(658) 评论(0) 推荐(0) 编辑
摘要: Array.form的用法 1.可以将各种值转为真正的数组,并且还提供map功能。这实际上意味着,只要有一个原始的数据结构,你就可以先对它的值进行处理,然后转成规范的数组结构,进而就可以使用数量众多的数组方法。 2.另一个应用是,将字符串转为数组,然后返回字符串的长度。因为它能正确处理各种Unico 阅读全文
posted @ 2016-03-14 15:05 马在路上 阅读(1016) 评论(0) 推荐(0) 编辑
摘要: 使用EZAudio库 录M4A格式可以参考该库例子中的代码. 录wav格式得改下源码.看下面的代码 1 AVAudioSession *session = [AVAudioSession sharedInstance]; 2 NSError *error = nil; 3 [session setC 阅读全文
posted @ 2016-03-10 11:20 马在路上 阅读(1522) 评论(0) 推荐(0) 编辑
摘要: 1.codePointAt方法是测试一个字符由两个字节还是由四个字节组成的最简单方法。 1 function is32Bit(c) { 2 return c.codePointAt(0) > 0xFFFF; 3 } 4 5 is32Bit("𠮷") // true 6 is32Bit("a") / 阅读全文
posted @ 2016-03-08 17:49 马在路上 阅读(541) 评论(0) 推荐(0) 编辑