自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

信者的路

每一段路只要还有不甘心,它就还没到尽头

  • 博客(37)
  • 收藏
  • 关注

原创 Category分类添加成员变量

思考:如何实现给分类“添加成员变量”?默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中。但可以通过关联对象来间接实现。我们现在来一步步分析:如下// RMPerson类@interface RMPerson : NSObject@property (nonatomic, assign) int age;@end@implementation RMPerson@end...

2018-10-09 10:30:51 944

原创 Category底层实现源码剖析

一、Category概念?Category是Objective-C 2.0之后添加的语言特性,分类、类别其实都是指的Category。Category的主要作用是为已经存在的类添加方法。可以把类的实现分开在几个不同的文件里面,这样做有几个好处,如下1.减少单个文件的体积2.把不同的功能组织到不同的category里3.由多个开发者共同完成一个类4.按需加载想要的category5....

2018-09-29 10:00:26 314

原创 KVO窥探其底层实现

概念KVO的全称是Key-Value- Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。本质利用RuntimeAPI动态生成一个子类,并且让改instance对象的isa指向这个全新的子类当修改对象的属性时,会调用Foundation的_NSSetXXXValueAndNotify函数 1.先调用willChangeValueForKey: 2.调用...

2018-08-27 11:49:05 408

原创 block-循环引用

block的循环引用,在日常开发中,我们常常遇到,但是可能部分新人还不太了解为何会循环引用,到底是如何循环引用理解得不够透彻,并且在ARC环境下只知道用__weakSelf去解决,但也不知道原因,现在我们来剖析一下,循环引用的的底层原理。看看下面一段常见的代码:循环引用原因分析#import <Foundation/Foundation.h>#import "RMPe...

2018-07-04 15:10:01 940

原创 block-__block修饰符和__block内存管理

一、__block修饰符的特点1.__block可以用于解决block内部无法修改auto变量值的问题 2.__block不能修饰全局变量、静态变量(static)因在block的内部是无法修改外部的auto变量的,所以需要通过__block修饰符来修改外部auto变量的值,看看下面的一段代码:#import <Foundation/Foundation.h>in...

2018-07-03 17:42:57 594

原创 block-对象类型的auto变量

从上些章节block-变量的捕获(caputer)中,详细说了基本类型的auto变量的捕获,现在来了解下,对象类型的auto变量是怎样捕获和底层结构是如何的。##### block自动copy的情况 在ARC环境下,编译器会根据情况自动将栈上的block复制到堆上,比如以下情况 - block作为函数返回值时 - block赋值给__strong指针时 - block作为Cocoa A...

2018-07-03 11:51:43 664

原创 block-类型

从《block-底层数据结构》中,我们知道block的本质就是就是OC对象,他也有isa指针,它既然是对象,那它是属于什么类型呢?那这章节,我们来探讨下block的类型block有三种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承NSBlock类型。NSGlobalBlock (__NSConcreteGlobalBlock) NSStackBlock ...

2018-07-02 16:38:29 305

原创 block-变量的捕获(capture)

为了能够保证block正常访问外部的变量,block有个变量捕获机制,如下图auto:自动变量,平时我们定义int age = 10,前面有个auto,auto int age = 10,系统帮我们默认的加上了一个auto。—–值传递—– static:静态变量 —–指针传递—– 全局变量 —–直接访问—–根据上面结论,我们一个个展开讨论和分析。一、自动变量auto修饰...

2018-06-13 16:25:39 416

原创 block-底层数据结构

1.block的本质1.block的本质也是一个OC对象,它也有一个isa指针 2.block是封装了函数调用以及函数调用环境的OC对象 3.block底层结构图,如下 2.block底层代码探索int main(int argc, const char * argv[]) { @autoreleasepool { void (^block)(vo...

2018-06-06 14:29:01 1154 1

原创 RAC学习四-RAC学习四(RAC常用方法)

1.代替代理 /* 1.代替代理 */self.textField.delegate = self;[[self rac_signalForSelector:@selector(textFieldDidBeginEditing:)fromProtocol:@protocol(UITextFieldDelegate)] subscribeNext:^(RACTuple * _Nullab...

2018-06-02 16:15:05 510

原创 RAC学习三-集合类RACTuple与RACSequence

RAC集合类1、RACTupleRACTuple的用法类似于OC里的数组用法,从源码来看像是NSArray的再封装,不过其宏使用比较多 RACTuple的简单用法//RACTuple 元祖RACTuple *tuple = [RACTuple tupleWithObjects:@"aa",@"bb",@"cc",nil];NSLog(@"tuple:%@:t

2018-05-30 17:35:43 464

原创 RAC学习二-RACReplaySubject

上图是RACSubject和RACReplaySubejct订阅信号的方法,RACReplaySubject是继承自RACSubject,所以RACReplaySubject既可以当做信号又可发送信号,但与RACSubject不同的是,RACSubject必须先订阅信号后发送信号,但RACReplaySubject既可以先订阅信号后发送信号,又可以先发送信号后订阅信号,即1. 创建信号...

2018-05-29 13:44:21 491

原创 RAC学习一 RACSignal、RACSubject、RACSubscriber、RACDisposable

概念RAC全称-ReactiveCocoa,是GitHub上的一个开源框架,普遍称之为“函数的响应式编程”,想详细了解什么为什么叫做函数式响应编程,看 袁峥的这边文章https://www.jianshu.com/p/87ef6720a096源码阅读RAC主要的类1、RACSignal (信号类) ①通过RACSignal一个信号,但创建出来的是冷信号 ②通过订阅者订阅...

2018-05-05 18:34:14 936

转载 iOS 成员变量,实例变量,属性变量的区别,联系

这几个概念往往知道了 过不了多久又忘  可能是因为平时并没有特别需要区分的地方  一般都用属性  某些时候可能会用到成员变量  ; 因为平时在写代码中并不需要过于区分  这可能是经常记住理解后又忘的原因吧; 但是很多文章 里面又提及到了这些概念  所以不得不再次温故而知新。 在ios第一版中:  我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,

2018-01-15 10:01:09 373

转载 Objective-C Runtime 运行时之三:方法与消息

前言前面我们讨论了Runtime中对类和对象的处理,及对成员变量与属性的处理。这一章,我们就要开始讨论Runtime中最有意思的一部分:消息处理机制。我们将详细讨论消息的发送及消息的转发。不过在讨论消息之前,我们先来了解一下与方法相关的一些内容。基础数据类型SELSEL又叫选择器,是表示一个方法的selector的指针,其定义如下:typedef struct objc_selector *SEL;

2017-08-04 17:12:13 375

转载 Objective-C Runtime 运行时之二:成员变量与属性

前言在前面一篇文章中,我们介绍了Runtime中与类和对象相关的内容,从这章开始,我们将讨论类实现细节相关的内容,主要包括类中成员变量,属性,方法,协议与分类的实现。本章的主要内容将聚集在Runtime对成员变量与属性的处理。在讨论之前,我们先介绍一个重要的概念:类型编码。类型编码(Type Encoding)作为对Runtime的补充,编译器将每个方法的返回值和参数类型编码为一个字符串,并将其与方

2017-08-03 16:45:20 598

转载 Objective-C Runtime 运行时之一:类与对象

本文章转载自:南峰子的技术博客 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作

2017-08-03 09:44:28 623

原创 iOS通用库----TableView多项选择全选和展开收起

一、前言章节主要是讲述使用UITableView的功能,对多项选择展开收缩作一个封装,从而日后的利用。下图为功能的展示 二、框架,核心类介绍上图1为这个封装功能的大体框架。细致的分已经包含了MVC的三层,利用时只需要传入对应的模型数据即可得到前面所展开的功能。上图二是核心类,主要是RMMultipleChoice,RMMultipleChoiceCell,RMTitleModel,RMCellMo

2017-08-01 17:18:13 977

原创 xcode8 使用Instruments检测定位并解决iOS内存泄露

简介:虽然苹果出了ARC(自动内存管理机制),我们不用花太多的时间在内存泄漏的问题上,但在我们开发的过程中,还是会因为各种原因而产生内存泄漏,例如Block的循环引用,delegate 写成了 strong,定时器没有关闭,弱指针使用不当等等。 所以我们下面就简单介绍下怎么使用Xcode8自带的Instruments中的Leaks检测我们的程序有没有内存泄露和定位内存泄露的代码,让我们可以更准确的

2017-07-27 17:22:28 12058 5

原创 iOS通用库--常用功能二之下拉选择框的封装

一、前言本章节,主要是讲述下拉选择框的封装,因为在开发中用得很多,也很常见,所以作了一个简洁的封装。 长话短说,上图,上代码,主要侧重于逻辑和封装的细节二、框架,核心类介绍图1是下拉选择框大体框架图2是下拉选择框的核心类DropDwonList三、下拉选择框封装类DropDownList的调用实现 首先,我们看看核心类DropDownList的头文件的内容,如上图3。 我们知道只要传入fram

2017-07-18 17:37:04 1504

原创 iOS通用库--常用功能一之与时间和日历相关的封装

前言 通常,我们做iOS App开发过程中,都会经常用到一些常用的功能。例如:启动页,轮播图,下拉框选择,验证码,网页缓存,本地图片选择,常用TableView的风格,CollectionView风格等等,这些常用的功能在我们日常开发中,几乎每个项目都用到,或者是一个项目当中多个功能用到这些小功能,所以,我打算把这些常用的功能封装成一个个接口,再封成一个常用的类库,大大的减少写重复代码的过程,与

2017-07-17 17:40:31 1086

原创 iOS "duplicate symbol"解决第三方库之间的冲突

一、问题叙述duplicate symbol(重复,相同的文件名)是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在。但是经过这种错误提示,会潜意识的反射出是文件重复了. 通常出现的情况:1、工程文件,同一个类文件被引入了两次引起这种错误的原因大概有两种:一是多人协作开发时,导致project文件合并冲突;二是同名文件不在同一目录下,添加到工程时造成重复添加。 这种一般在文件视图,用名

2017-07-14 16:53:38 4617

原创 HTTP、TCP和Socket的概念和原理及其区别

一、HTTPHTTP简介 ①HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 ②HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 ③HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式

2017-07-13 17:19:15 979

原创 TCP/IP协议的简单认识

基础概念一、为什么会有TCP/IP呢?在世界上,各种各样的电脑运行着各不相同的操作系统为大家服务着,然而这些电脑在表达同一种信息的时候使用方法也是千差万别,就像好像不同的地区有不同的方言,沟通起来互相听不懂,让他们很难很好的交流。慢慢的计算机的使用者也意识到单兵作战不会发挥太多的作用,只有把它们联合起来,电脑才会发挥它最大的潜力,所以人们就想方设法的用网线把它们串联起来。但是简单的连接在一起还是不能

2017-07-10 17:37:55 678

原创 iOS软件编程规范

1. 目的统一XCode编辑环境下Objective-C编程风格和标准,提高代码可读性与编码效率,避免团队开发可能带来混乱。2. 适用范围本规范适用于公司所有用Objective-C语言开发的项目。3. 定义规则 : 编程时必须遵守的约定建议 : 编程时需要考虑的约定正例 : 对此规则或建议给出的正确例子反例: 对此规则或建议给出的反面例子4. 基本原则4.1. 基

2017-07-03 17:25:22 683

原创 内网与外网之间是如何通信的

1、思考:A 和 B 的局域网 IP 都是192.168.31.11,当他们都访问百度浏览网页时,百度服务器回复数据时,如何区分是给 A 还是给 B 呢对于初学者而已,我们学习的网络编程(如TCP,UDP编程),我们通常都是在局域网内进行通信测试,有时候我们或者会想,我们现在写的内网网络数据和外网的网络数据有什么不同,我们内网的数据是如何走出外网的呢? 再者,我们大多人都是使用宽带上网,结果发现,

2017-07-03 16:38:24 6129 1

原创 KVO键值观察运用及其原理

1、概念KVO(Key-Value Observing),意为键值观察,它来源于设计者模式的观察者模式,它的基本思想是: 一个目标对象管理所有依赖它的观察者对象,并在它自身的状态发生改变时主动通知其观察者对象,这个主动通知通常是通过实现调用各观察者所提供的方法。观察者模式可以较完美的将目标对象和观察者对象解耦,可达到低耦合的理想状态。2、原理KVO在Apple中的API文档如下: Aut

2017-07-03 11:37:11 379

原创 NSMutableArray使用copy声明所产生内存泄漏的问题

上图是定义一个不可数对象mutableArray,使用copy来声明所使用的代码。 所报的错如上图,意为:在NSArray这样的类型中,找不到removeObject:方法。为什么会出现这样的错误呢?相反,如果使用strong来声明的话就不会出错。综合上诉,通过思考会明显看出有两个问题:1、为什么使用copy会报错,使用strong却不会。2、为什么报错会报在NSArray中,无法找不到remov

2017-06-30 11:21:42 788

原创 KVC的理解、与runtime结合应用及其底层原理

一、KVC的概念理解及常用方法概念KVC(Key-Value Coding)顾名思义,就是键值编码的意思。 在iOS中,KVC就是通过使用属性的名称间接性来访问属性的方法,通俗一点的理解就是可以通过对象属性名称(Key)直接给属性值(Value)编码(Coding)“编码”可以理解为“赋值”。这个方法可以不通过getter/setter方法来访问对象的属性。因为一个类的成员变量如果没有提供gett

2017-06-29 15:52:58 870

转载 iOS中集成ijkplayer视频直播框架

本文转摘自: @jianshu_wl 的简书  ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijkplayer, 即便以前从没有接触过, 按着下面做也可以集成成功!一. 下载ijkplayerijkplayer下载地址:htt

2017-06-20 16:21:23 626

转载 【如何快速的开发一个完整的iOS直播app】(原理篇)

目录【如何快速的开发一个完整的iOS直播app】(原理篇)【如何快速的开发一个完整的iOS直播app】(播放篇)【如何快速的开发一个完整的iOS直播app】(采集篇)【如何快速的开发一个完整的iOS直播app】(美颜篇)前言:转载自:袁峥Seemygo http://www.jianshu.com/p/bd42bacbe4cc一、个人见解(直播难与易)直播难:个人认为要

2017-06-20 15:17:37 1062

原创 iOS应用程序的生命周期

无论是学习object C语言还是其他语言,我们首先要了解的就是该语言在程序中是如何运行的,生命周期是怎样的。学习iOS手机开发,就得了解iOS程序的运行的生命周期是如何的,现在我们来了解下iOS程序的生命周期iOS.#####iOS程序的入口程序和其他语言也是一样的,都是从mian函数还是启动,如下图main.m文件就是程序的启动入口int main(int argc, char * argv[]

2017-05-26 15:31:57 510

原创 OpenGL ES零基础入门四矩形的绘制

绘制矩形在上一篇文章 OpenGL ES零基础入门—-(2)绘制三角形 中,使用OpenGLES绘制了基本的三角形,从绘制三角形中,我们也大概了解了OpenGL的基本使用,包括设置 CAEAGLLayer 属性,创建 EAGLContext,创建和使用 renderbuffer 和 framebuffer,了解OpenGL ES 渲染管线,创建和使用 shader,创建和实现 program,使用顶

2017-05-23 23:20:50 1538

原创 OpengGL ES基础入门三 着色器的介绍

着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。前面的教程里我们简要地触及了一点着色器的皮毛,并了解了如何恰当地使用它们。现在我们会用一种更加广泛的形式详细解释着色器,特别是OpenGL着色器语言(GLSL

2017-05-23 15:06:17 483

原创 OpenGL ES零基础入门二绘制三角形

前言在前文一、配置OpenGL ES渲染的上下文EAGLContext(context)二、配置渲染的图层layer(rendering layer)三、配置渲染缓冲区和帧缓冲区(renderBuffer and frameBuffer )四、着色器着色(user vertextShader and framentShader)《OpenGL ES 创建窗口》代码的基础上进行编码。在前面提到可编程管

2017-05-23 14:56:46 604

原创 OpenGLES入门一之渲染窗口

iOS上绘制图形的方式很多,UIKit,CoreGraphics,SpriteKit,OpenGL ES,Metal等可以绘制图形。这里是OpenGL ES的零基础入门学习。 OpenGL ES是一套非常底层但使用非常广泛的C语言API,专为移动设备定制,可在不同的手机系统或浏览器上使用,渲染效果非常好非常流畅。开始创建窗口的学习,本章的学习目标是用OpenGL ES 渲染一个窗口。1.创建一个

2017-05-10 10:00:29 967

转载 OpenGL ES入门05-OpenGL ES 纹理贴图

前言本文是关于OpenGL ES的系统性学习过程,记录了自己在学习OpenGL ES时的收获。这篇文章的目标是学习OpenGL ES 2.0中的纹理贴图技术。环境是Xcode8.1+OpenGL ES 2.0目前代码已经放到github上面,OpenGL ES入门05-OpenGL ES 纹理贴图欢迎关注我的 OpenGL ES入门专题概述纹理 是表示物

2017-05-10 09:47:04 770

空空如也

空空如也

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

TA关注的人

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