自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿福的专栏

好记性不如多多总结~

  • 博客(22)
  • 资源 (24)
  • 收藏
  • 关注

原创 iOS开发~细聊设计模式

文章目录一、概述二、框架模式,框架,设计模式1.首先搞清楚这三个概念:总结一、概述无论是初出茅庐还是代码老手,平时工作或面试的时候,经常会提到“设计模式”这个词,还记得刚接触iOS还不算入门的时候,第一次给领导汇报工作进度,就把MVC设计模式写在报告里,瞬间感觉自己写的东西好像专业一些了!后来接触项目越来越多,MVC更是耳熟能详,但随着学习积累,突然发现以前学东西不够系统和全面。那么问题第一个问题来了,MVC是不是设计模式?面试中也经常会问,例如:你经...

2020-08-31 13:43:18 680

原创 iOS多线程之线程锁

在多线程开发中,不可忽视的一个问题就是多个线程同时访问同一个资源时,会造成脏数据等预想不到的结果,为了避免这种现象,我们需要在访问资源的时候添加线程锁,来控制访问。添加线程锁的方式在这主要讲三种方式:@synchronized隐式创建锁对象 NSLock GCD的dispatch_semaphore_t信号机制一、@synchronized( )@synchronized()内的对象设定为锁的唯一标识,只有标识相同时,才满足互斥-(void)testSynchronized.

2020-08-28 17:10:23 236

原创 iOS音视频~编码理论详述

一、为什么要进行视频编码未经压缩的视频的数据量巨大,录制一分钟视频, 需要多大的空间来保存了?1> 为了不让用户感受到卡顿效果, 1秒钟之内至少需要16帧画面(正常开发通常会采集30帧),也就是编码设置的fps参数2> 假如该视频是一个1280*720分辨率的视频(正常情况下会比这个大很多)结果:128072016*60≈843.75M一分钟的视频843M,如果保证播放不卡顿,则需要15M/S 的下载速度,如果使用蜂窝网络...结论:1.如此大的传输数据量,现行带宽压力巨

2020-08-26 14:52:53 567

原创 iOS音视频~H264视频硬件编解码说明

一般系统都会提供GPU或者专用处理器来对视频流进行编解码,也就是硬件编码和解码,简称为硬编解码。苹果在iOS 8.0系统之前,没有开放系统的硬件编码解码功能,不过Mac OS系统一直有,被称为Video ToolBox的框架来处理硬件的编码和解码,终于在iOS 8.0后,苹果将该框架引入iOS系统。由此,开发者便可以在iOS里面,调用Video Toolbox框架提供的接口,来对视频进行硬件编解码的工作,为VOIP视频通话,视频流播放等应用的视频编解码提供了便利。(PS:按照苹果WWDC2014 5

2020-08-26 13:11:41 1198

转载 有赞移动 iOS 组件化(模块化)架构设计实践

一、背景业务组件化(或者叫模块化)作为移动端应用架构的主流方式之一,近年来一直是业界积极探索和实践的方向。有赞移动团队自16年起也在不断尝试各种组件化方案,在有赞微信商城,有赞零售,有赞美业等多个应用中进行了实践。我们踩过一些坑,也收获了很多宝贵的经验,并沉淀出 iOS 相关框架Bifrost(雷神里的彩虹桥)。在过程中我们深刻体会到“没有绝对正确的架构,只有最合适的架构”这句话的意义。很多通用方案只是组件化的冰山一角,实际落地过程中还有相当多的东西需要考量。本文并不准备对组件化架构设计方案给出一..

2020-08-26 09:33:18 1063 1

转载 iOS开发~超详细集成 FFmpeg 步骤

概述网上充斥着大量的 iOS FFmpeg 编译的教程,有的时间比较早了,有的很多都没有说详细,或者有个别坑作者没有讲到,有的讲到到了一半,没有例子。所以本人参考了网上的编译FFmpeg教程到集成的很多文章,然后加上本人进行了实际操作,总结出了此篇文章,希望大家如果有用到FFmpeg,以后少走一些坑。此篇文章内容会包含:从新建 iOS 工程 -------> 到调用FFmpeg 命令 -------> 直到运行项目成功的本人实操的所有步骤。目录FFmpeg 简介 FFm

2020-08-26 09:32:40 878

原创 算法(4)数据结构:堆

1.0 问题描述实现数据结构:堆。2.0 问题分析堆一般使用数组来表示,其中某个节点下标i的两个子节点的下标为 2i+1 和 2i+2。堆是一棵完全二叉树。 堆有3种基本操作:创建,插入,删除。 这3种操作都需要通过“调整堆”的方式来实现。调整堆是指,对堆中的某个节点,若它的值和它所有子节点相比,不是最大/最小,那么就需要将最大/最小的元素和当前节点交换,这种操作成为“调整堆”。 创建可以用插入来实现(复杂度O(nlogn)),也可以使用数组直接转换成堆(复杂度O(n))。 假设数组长度

2020-08-26 09:31:18 88

原创 算法(5)哈希表

1.0 问题描述实现数据结构:哈希表。2.0 问题分析哈希表可以看作我们经常使用的字典(swift)或对象(js),可以让一个key&value对一一对应,可以快速根据key找到value。 哈希表内部使用数组实现,我们需要将不论任何类型的key计算出与之一一对应的数字来,数字的大小介于0到数组尺寸之间,这样,我们可以把value直接存储到数组的对应位置。 通过key计算出唯一数字的过程,叫做哈希函数。同一个key每次通过hash函数生成的数字都是相同的。 由于不同的key可能会生

2020-08-26 09:31:07 204

原创 iOS开发~音视频编码

iOS音视频开发涉及的方面比较广泛,一般分为采集、音视频的封装、编码、推流、拉流、解封装、解码、播放等阶段。其中音视频的编码和解码阶段是非常重要的步骤。其中编码分为硬编码和软编码,对应解码分为硬解码和软解码。硬编码硬编码是指使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等。硬编码一般性能高,对CPU没有压力,但是对其他硬件要求较高(如GPU等)。软编码软编码是指使用CPU进行编码,软编码通常使用:ffmpeg+x264。软编码实现直接、简单,参数调整方便,升级易

2020-08-26 09:30:57 498

原创 图像处理库GPUImage简单使用

一、介绍GPUImage是一个基于OpenGL ES 2.0的开源的图像处理库,作者是Brad Larson。GPUImage将OpenGL ES封装为简洁的Objective-C或Swift接口,可以用来给图像、实时相机视频、电影等添加滤镜。二、使用1.导入GPUImage两种方式a.使用cocopods导入platform :ios, '9.0'target 'GPUImageDemo' dopod 'GPUImage'endb.手动导入(1).首先下...

2020-08-26 09:30:47 3775

原创 iOS直播类APP开发流程解析

前言个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够学几年的。如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会进行修改, 祝大家学习愉快~谢谢~ 一个完整直播APP原理把主播录制的视频,推送到服务器,在由服务器分发给观众观看。推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统

2020-08-26 09:30:10 1122

原创 算法(3)简单四则运算

1.0 问题描述实现10以内四则运算(只包含数字,±*/和小括号)2.0 问题分析四则运算使用“后缀表达式”算法来计算,后缀表达式可以无需考虑运算符优先级,直接从左至右依次计算。 问题分解成2部分,一是将“中缀表达式”(我们正常写的四则运算字符串样式,即我们的输入表达式)转为“后缀表达式”;二是使用“后缀表达式”求值。 “中缀表达式”转“后缀表达式”流程: 首先建立一个栈和一个队列,分别为“符号栈”和“结果队列”:“符号栈”用于保存符号,处理符号优先级;“结果队列”用于保存“后缀表达式”

2020-08-25 14:10:26 350

原创 算法(2)KMP算法

1.0 问题描述实现KMP算法查找字符串。2.0 问题分析“KMP算法”是对字符串查找“简单算法”的优化。 字符串查找“简单算法”是源字符串每个字符分别使用匹配串进行匹配,一旦失配,模式串下标归0,源字符串下标加1。 可以很容易计算字符串查找“简单算法”的时间复杂度为O(m*n),其中n表示源字符串长度,m表示匹配串长度。 KMP算法的匹配方式同简单算法的匹配方式相同,只不过在失配的时候,模式串下标不归零,反而会根据模式串自身的重复信息,回归到一个大于0的下标。从而减少匹配次数。 那么失

2020-08-25 14:08:54 162

原创 有趣的斐波那契数列

1.0 问题描述实现斐波那契数列,求第N项的值2.0 问题分析斐波那契数列最简单的方法是使用递归,递归和查表法同时使用,可以降低复杂度。 根据数列特点,同时进行计算的数值其实只有3个,所以可以使用3个变量循环递进计算结果。 3个变量可以简化为2个变量。3.0 代码实现3.1使用swift实现func fbnq(_ n: Int) -> UInt64{ if n < 0 || n > 92 { return 0; } var

2020-08-25 14:07:34 400

原创 iOS应用模块化的思考及落地方案(二)模块化自动构建工具的使用

1.0 iOS模块化中的问题前文已经介绍了模块化的流程及一些常见的问题,我们在这里再次总结一下。在工作中,当我们开始一个新项目的时候,最先考虑的就是模块化工作。模块化工作的想法是很美好的,可是执行过程中会遇到很多的问题,而这些问题可能会让我们在工作中举步维艰。 工具使用问题。iOS的模块化一般会使用cocoapods工具,这个工具很强大,内容也很丰富,我们想要完成模块化工作,需要建立私有库,编写podspec文件,处理资源,编写Podfile文件,建立本地依赖等等。让团队成员每个人都精通这

2020-08-25 14:01:01 162

原创 iOS应用模块化的思考及落地方案(一)模块的划分及模块化工作流程

1.0 什么是模块化很多关于重构及设计模式的介绍中,经常提到的几个词语是复用及解耦。模块化之所以被提出,也更多是为了解决这几个问题。复用可以减少重复造轮子的情况,很容易理解的是,我们经常使用的github上的第三方框架,比如,AFNetworking等,有了这些组件,我们就不需要再写一遍了。解耦可以减少类或文件之间的关联,如果一个类引用了其他10个类,那么当我们看到这个类或修改这个类的时候,我们同时需要关注另外10个类,了解它们与本类的关联情况。如果你的类,没有与其他任何类关联,你在阅读代码

2020-08-25 14:00:30 406

原创 iOS视频开发(四):通俗理解YUV数据

前言系列文章:《iOS视频开发(一):视频采集》《iOS视频开发(二):视频H264硬编码》《iOS视频开发(三):视频H264硬解码》《iOS视频开发(四):通俗理解YUV数据》前面我们已经介绍了在iOS开发中如果调用摄像头进行视频数据的采集和编解码。但折腾了这么多,对于YUV这玩意儿还是不是特别理解。其实在我的个人实践过程中我也一直搞不懂这个YUV,一顿恶补之后,我们来通俗一点地讲YUV这个数据格式。1、YUV & RGB概述2、YUV的采样方式3、YUV的储存方式及常见格式4

2020-08-25 13:36:38 817

原创 iOS视频开发(三):视频H264硬解码

前言系列文章:《iOS视频开发(一):视频采集》《iOS视频开发(二):视频H264硬编码》《iOS视频开发(三):视频H264硬解码》《iOS视频开发(四):通俗理解YUV数据》上一篇《iOS视频开发(二):视频H264硬编码》我们已经学会了如何对视频数据进行H264编码并且了解了H264码流的基本结构。通常我们将视频进行H264编码是为了进行网络传输,如网络直播、视频会议等应用。网络传输相关的知识点较多且杂,这里我们且先不进行深入研究。我们接着讲对于H264数据,我们如何对其进行解码,本文就来讲

2020-08-25 13:35:57 957

原创 iOS视频开发(二):视频H264硬编码

前言系列文章:《iOS视频开发(一):视频采集》《iOS视频开发(二):视频H264硬编码》《iOS视频开发(三):视频H264硬解码》《iOS视频开发(四):通俗理解YUV数据》上一篇《iOS视频开发(一):视频采集》我们已经介绍了如何采集iOS摄像头的视频数据,采集到的原始视频数据量是比较大的,这么大的数据量不利于进行储存或网络传输。于是我们需要对视频数据进行压缩,就像你要向别人传文件时觉得文件太大了,打个rar压缩包再发给对方的道理一样。视频数据的压缩也叫做编码,H264是一种视频编码格式,i

2020-08-25 13:35:11 2082 1

原创 iOS视频开发(一):视频采集

前言系列文章:《iOS视频开发(一):视频采集》《iOS视频开发(二):视频H264硬编码》《iOS视频开发(三):视频H264硬解码》《iOS视频开发(四):通俗理解YUV数据》作为iOS音视频开发之视频开发的第一篇,本文介绍iOS视频采集的相关概念及视频采集的工作原理,后续将对采集后的视频数据进行硬编码、硬解码、播放等流程进行分析讲解。基本概念AVCaptureSession苹果为了管理从摄像头、麦克风等设备捕获到的信息,整了一个叫做AVCaptureSession的东西来对输入和输

2020-08-25 13:34:11 1643

原创 常用的邮箱服务器(SMTP、POP3)地址、端口

sina.com:POP3服务器地址:pop3.sina.com.cn(端口:110)SMTP服务器地址:smtp.sina.com.cn(端口:25)sina.cn:POP3服务器地址:pop3.sina.com(端口:110) ------- > pop.sina.comSMTP服务器地址:smtp.sina.com(端口:25)sinaVIP:POP3服务器:pop3.vip.sina...

2020-08-25 07:13:28 30325

原创 AutoreleasePool 的相关问题

(1)Autoreleasepool的实现原理:以栈为结点,由双向链表的形式合成的数据结构。 与线程一一对应。双向链表(2)@autoReleasePool经过编译器变异后,成为:void * ctx = objc_autoReleasePoolPush(); //ctx 就是哨兵对象所对应的位置。{}对应代码;objc_autoReleasePoolPop(ctx); objc_autoReleasePoolPush(); 的内部实现:调用了c++中的一个结构体:autoRe

2020-08-16 19:25:33 258

总览汇编寄存器,方便记忆和复习。

总览汇编寄存器,方便记忆和复习。寄存器是CPU的组成部分,因为在CPU内,所以CPU对其读写速度是最快的,不需要IO传输, 但同时也决定了此类寄存器数量非常有限,有限到几乎每个存储都有自己的名字,而且有些还有多个名字。

2020-09-15

程序员健康指南

对于一个程序员,往往长期面对电脑,久坐不动,缺少运动,不合理的饮食习惯,熬夜等等。这些不良的生活习惯,往往导致程序员健康出现一些问题,如颈椎病,背部疼痛,腕管综合征等等。

2017-10-17

bugfree3.0.4

新特性: 1. case支持导出导入注释 2. bug支持新增导入功能 3. 我的查询增加“抄送给我”的默认查询 4. 添加产品用户组管理员静态页面 5. 支持case、result等tab页面隐藏功能(如何修改) 6. 详情页上方toolbar栏固定显示 7. 注释栏和复现步骤栏可展开折叠显示 易用性: 1. 安装检测json_encode支持情况 2. 运行环境ldap模块检查

2015-11-24

iPhone6、6P适配Demo

目前为止,iPhone屏幕尺寸已经有四种: 3.5(inch):1/3G/3GS/4/4S 4.0(inch):5/5S/5C 4.7(inch):6 5.5(inch):6Plus 看一下iPhone4~6(+)的屏幕高宽比: iPhone4(s):分辨率960*640,高宽比1.5 iPhone5(s):分辨率1136*640,高宽比1.775 iPhone6:分辨率1334*750,高宽比1.779 iPhone6+:分辨率1920*1080,高宽比1.778 可粗略认为iPhone5(s)、6(+)的高宽比是一致的(16:9),即可以等比例缩放。因此可以按宽度适配: fitScreenWidth= width*(SCREEN_WIDTH/320) 这样,共有iPhone3/4/5、6、6+三组宽度,在iPhone6、6+下将按比例横向放大,也就是说我们要适配宽、高、字号大小(如果说Android屏幕适配是地狱一般,那目前来看iPhone屏幕适配还是很美好的)

2015-09-02

JavaScriptCoreDemo

IOS7之前,接触 JS 更多的是处理UIWebView的时候,如:http://blog.csdn.net/zfpp25_/article/details/8650412 但IOS7引入了JS框架<JavaScriptCore/JavaScriptCore.h>,给了“纯IOS程序员”一个枯木逢春的契机~学习强大的 JavaScript。

2015-03-18

Core Animation(二)动画基础部分

上一篇简单的描述了Core Animation相关的内容,并且亲自动手实践了一个动画,同时也提到了“隐式动画”和“显示动画”,也提到了UIKit动画,可见iOS的动画部分确实有些内容需要掌握

2015-02-09

学习Core Animation例子CADemo1

Core Animation包含于QuartzCore.framwork中,是iOS与OS X平台上负责图形渲染与动画的基础设施

2015-02-08

Slidingmenu-MenuDemo

一个很开的开源项目,android侧边栏效果,由于Github上的demo存在问题,所以亲自集成了一下,希望可以帮助到遇到同样问题的人。

2015-01-14

iOS8开发~UI布局(三)深入理解autolayout

iOS8开发~UI布局(三)深入理解autolayout中的所有Demo

2014-10-10

iOS8AutoLayout-Demo3

iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解

2014-10-09

iOS8开发~UI布局(二)Demo

iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解

2014-10-09

iOS8-AL8-Demo

iOS界面布局SizeClass使用第一个Demo,用于演示博文中提到的知识点。

2014-10-08

OC与Swift混编Demo

Swift与OC混编,其中涉及到具体项目配置及其代码举例。

2014-06-11

Swift版本UI实现

Swift版本UI实现常用UI控件,新的编程语言,新的习惯。

2014-06-07

自定义Xcode模版

Xcode自定义模版中的Demo,包含工程模版自定义和文件模版自定义。

2014-05-30

Git入门教程

Git入门教程,详细举例git用法,简单入门

2013-12-29

很好用的文本编辑器Sublime Text(Mac版)

很好用的文本编辑器Sublime Text(Mac版)

2013-08-13

Android开发ADT-21.0.0.zip

Android开发 ADT-21,解决老版本的BUG

2013-04-30

Android开发ADT-20.0.3

Android开发ADT-20.0.3,可以解决Eclpse不能拷贝和粘贴。

2013-04-30

Versions免费版

现在Versions SVN代码管理工具收费了,这里提供一版低版本免费的Versions。

2013-03-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除