iOS
Ginhoor
这个作者很懒,什么都没留下…
展开
-
对象的序列化NSObject<NSCoding>
什么叫对象序列化?对象序列化就是把对象写入到输出流中,用来存储或者传输,如果不序列化,(自定义对象是无法存储的)。对象的反序列化就是从输入流中读取对象。将对象转换为字节流保存起来,并在日后还原这个对象,这种机制叫做对象序列化。我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化!)为什么要序列化?1.需要...原创 2014-03-24 16:25:43 · 1833 阅读 · 0 评论 -
《iOS开发进阶》阅读总结
1.引用计数的作用对象A向对象B传递参数对象M ,对象M可能成为对象B的成员变量,也可能只是临时使用,如果不用引用计数控制,则无法在正确的时间释放对象M。案例一:对象A将对象M传递给对象B后,对象B复制一份对象M的拷贝M1,然后对象A释放对象M,这样由对象B继续维护对象M1的生命周期。缺点:会带来更多的内存申请、复制、释放的工作,影响性能。案例二:对象A将对象M传递给对...原创 2017-03-31 14:29:50 · 787 阅读 · 0 评论 -
关于IJKPlayer的静态库合并生成以及引用
根据IJKPlayer的README来配置项目下面逐句解释下【1】git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios 通过git下载ijkplayer的项目【2】cd ijkplayer-ios git checkout -B latest k0.7.8.【3】./in...原创 2017-04-07 12:21:01 · 1723 阅读 · 0 评论 -
iOS 多线程篇
NSOperationQueue的工作流程NSOperationQueue在初始化是,可以指定并发数有NSOperation被加入到队列中,队列开始排期执行。当NSOperation被执行完毕,会用列表中被移除。当所有的NSOperation都被执行完,队列任务完成。自定义NSOperation并发NSOperation有三种状态:Ready、Executing、Finished。...原创 2019-01-16 17:15:09 · 137 阅读 · 0 评论 -
iOS UI性能优化篇
列表优化列表元素高度动态计算会增加CPU消耗,可以进行缓存,减少计算量列表元素中的固定图片使用imageByName获取,系统会自动在内存中进行缓存。减少列表元素的个数和层级,复杂UI可以考虑通过CoreGraphics绘制减少透明View多层级使用,多个层级的透明View渲染会增加CPU消耗。离屏渲染离屏渲染需要开辟一个新的缓存区进行渲染操作,然后进行上下文切换,将从当前屏幕切换...原创 2019-01-16 17:04:09 · 608 阅读 · 1 评论 -
UIImage的马赛克处理
马赛克的原理:将原有图一个像素点的颜色扩散到周围的像素点,使多个像素点的颜色都显示相同颜色,相当于分辨率下降,图像就会变得模糊不清。如下代码每个像素为8位颜色值,四个通道,分别表示ARGB(透明度、红、绿、蓝)。对图片进行逐行扫描,如level为10,拷贝出坐标(0,0)点的颜色,将坐标(0,0)至坐标(10,10)都使用这个坐标(0,0)点的颜色,这样就达到了马赛克的效果下面这段代码也...原创 2019-01-10 17:17:16 · 502 阅读 · 0 评论 -
基于NSOperation的串行线程
背景介绍:在接入七牛SDK的时候,发现SDK没有批量上传图片的接口,业务又涉及到了上传进度统计,并且要求一次性的图片完整上传。开始的时候打算用GCD,写着写着感觉扩展性不好,可读性不高,取消机制也不是很友好,线程不能暂停,于是改成了NSBlockOperation来实现.h文件/** 串行队列 @param dataList 数据源 @param opreationBlock 运行...原创 2019-01-03 13:05:16 · 387 阅读 · 0 评论 -
灵活的弹出层方案Popup
为了解决业务中经常出现的弹层问题,我抽象了一个简单的弹层框架。这个框架写的很简单,基本看两眼就懂了,也容易扩展。框架有三部分组成,内容层(View),背景渲染层(View),视图控制器(ViewController)、管理者(简单分装用法)主要思路是,创建一个自定义window,并作为keyWindow遮盖在当前window之上。在这个window上再绘制需要的背景,内容,动画效果。这个...原创 2019-01-03 13:03:58 · 3158 阅读 · 0 评论 -
补充YYModel无法直接关联CoreData
好久没写博文了,18年真是忙碌的一年,一眨眼居然就19年了,居然空了一年没写,今年先开个好头吧,整理一下去年的积累。JSON转Model是一个很长常见,又非常繁琐的技术方案,好在现在有很多第三方库支援,让我们不用重复造轮子。博主一直都喜欢用Mantle框架,无奈Mantle框架的model定义过于繁琐,尤其是类型转换。于是就转投了YYModel的怀抱,在此感谢下YYModel的作者(YYMode...原创 2019-01-03 13:02:06 · 428 阅读 · 0 评论 -
AsyncDisplayKit(Texture)原理分析
ASDK涉及的UI任务Layout文本宽高计算视图布局计算Rendering文本渲染图片解码图形绘制UIKit Objects对象创建对象调整对象销毁ASDK尝试将这些任务放到异步线程处理,如UIKit与CoreAnimation只能在主线程操作的,则进行优化。ASDisplayNodeUIView与CALayer只能在主线程创建和销毁,所以ASDK创建了A...原创 2019-02-26 11:24:39 · 1184 阅读 · 0 评论 -
CoreData的性能调优
查询优化查询情况分为三种对象在当前Managed Context中(尚在内存中)。对象在持久化存储协调器中。对象需要从sqlite文件读取(I/O读取)。当内存允许的时候,能同时取出的对象,不要分多次取出。设置合理的Predicates限制更大的筛选条件应当放在优先位置,更好地提高筛选效率。查询字符串速度比较慢,所以(age &gt; 10 )AND (name LIKE ‘J...原创 2019-02-25 14:37:43 · 1112 阅读 · 0 评论 -
CoreData的优缺点
总结一下关于CoreData的使用经验优点便利性即使直接使用SQLite,在业务层也不应当直接操作SQL语句。数据库操作最终都是被封装起来使用的。这样直接操作SQLite和使用CoreData区别不大。存储性能CoreData也是使用SQLite格式作为磁盘存储格式,所以性能上区别也不大。查询性能打开CoreData的Debug模式,可以看CoreData具体执行了多少的SQL语句,...原创 2019-02-25 14:37:02 · 1499 阅读 · 0 评论 -
关于iOS TDD&BDD的学习与使用
TDD(测试驱动开发 TestDrivenDevelopment),相比传统的开发流程,会先写测试,待测试通过再实际开发功能模块。这样的好处是在你使用这些已经测试过的功能时,不用担心他们的可用性。BDD(行为驱动开发Behavior DrivenDevelopment),相比TDD,相关测试代码更加集中,也更加简单易懂相关链接:TDD的iOS开发初步以及Kiwi使用入门...原创 2015-09-08 13:52:48 · 866 阅读 · 0 评论 -
《iOS高级内存管理编程指南》学习笔记
Object-C 一共有3种内存管理方式:1. MRR(Manual Retain-Release)手动持有-释放。采用了引用计数模型,由基础类NSObject和运行时(Runtime Eviroment)共同提供。2. ARC (Automatic Retain-Count)自动引用计数。此方式采用与MRR相同的引用计数系统,但是在编译时(Compile-time)插入了内存管理的方法...原创 2015-02-11 17:16:37 · 804 阅读 · 0 评论 -
CoreData与Mantle的结合使用案例
Mantle(https://github.com/Mantle/Mantle)是一个用于操作CoreData的封装库。这个库的作用有两个,一是方便的对包含json数据的NSDictionary对象进行解析,并且使用其初始化对象。二是可以方便的将对象存储到CoreData中去。先说第一个功能点。首先你的类需要继承MTLModel,然后实现MTLJSONSerializing ...原创 2014-12-09 11:28:40 · 1662 阅读 · 0 评论 -
对MVVM和MVC的理解
最近学习了ReactiveCocoa,于是对MVVM有了点了解,感觉是个很神奇的模式。简单的总结一下吧MVVM:分离了ViewController中数据获取部分,将这部分放入ViewModel中,这样就可以在测试时单独测试数据获取了。MVC:简单的分离了View,Model,ViewController,很稳定,但是不便于测试。数据获取代码无法重用。暂时的理解还...原创 2014-03-24 16:20:07 · 804 阅读 · 0 评论 -
iOS 网络篇
NSURLSession工作流程NSURLSessionDataTask 发起一个POST HTTP请求创建一个NSSessionConfiguration用Configuration创建一个NSURLSession,设置缓存策略,delegate,Task所在线程创建一个NSURLRequest,设置请求类型为POST,构造HTTP Header,将参数放入HTTPBody用NSUR...原创 2019-01-14 18:29:55 · 511 阅读 · 0 评论 -
AppDelegate模块化历程
源码地址: GHApplicationMediator为什么AppDelegate不容易维护AppDelegate控制着App的主要生命周期,比如App初始化完成后构建主视图,App接收到远程消息回调,Url-Scheme回调,第三方SDK初始化,数据库初始化等等。基于这个原因,随着App的版本迭代,AppDelegate中的代码量会越来越大。当AppDelegate的代码量到达一定程度时,...原创 2019-03-06 16:59:24 · 417 阅读 · 0 评论 -
SpriteKit 个人学习总结
Q: SKTexture: Error loading image resource: "Spaceship.png"?A: Xcode5 GM版本在直接Add Files to Project 图片文件的时候,不会自动将其添加到编译资源文件中,需要去项目中(Build Phases)手动添加资源文件(copy Bundle Resource),Q: 为什么使用sks文件时候会出现 ...原创 2014-02-27 16:20:25 · 1240 阅读 · 0 评论 -
JS与UIWebview交互原理摘记(WebViewJavascriptBridge)
最近用到了WebViewJavascriptBridge这个库来与JS交互。由于没用过js,也没有什么web端的开发经验,竟然一直对这库的原理表示不解,面试时候被问及,囧了好久。为了弥补下我受伤的心灵,特此写下此贴。UIWebView交互JS,很简单,直接调用webView的API,[webViewstringByEvaluatingJavaScriptFromString:@...原创 2014-03-24 16:14:06 · 1431 阅读 · 0 评论 -
鉴别你的用户使用的是“伪正版”或“越狱”版本
大家一定碰到过,一些无良的第三方市场,无耻地用正版的名义盗版你的APP(作者曾经天真的以为他们只是发布itunes的链接),在天朝这个神奇的土地上,还没办法制裁他们,真是让人头疼。前面也就是发发牢骚,反过来说他们也带来了一定的用户量(虽然忠诚度不好说),接下去要告诉你的就是鉴别的方法。以下这段代码是用来鉴别是否是越狱用户的,由于越狱用户可以打破沙盒机制,所以你的APP可以直接访问到用...原创 2014-03-24 15:54:16 · 1439 阅读 · 0 评论 -
iOS7CollectionView有空白头部的解决方案
一个奇怪的问题碰到了好几次,每次都以为是偶然,结果就没有记录解决方案……这次抽空把解决方案贴上,省得又忘记了。这个就是问题的实际情况,可以看下图,collectionView的上半部分出现了一部分空白,实际使用过程中也是这样的。这是由于iOS7UI改版后新增的效果,这个效果会让你的滚动控件自动留出与NavBar高度相同的空白。这样在滚动时,透明的NavBar就会显示出下方控件的内...原创 2014-03-05 11:29:16 · 3293 阅读 · 0 评论 -
setStatusBarOrientation 未生效的解决办法
ios7,碰到个需要手动调整状态栏方向的问题,于是调用了下面这段代码。//设置状态栏 横屏[[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];问题来了,死活就是没有效果。经过一番寻找,发现是UIviewController方法- ...原创 2014-03-04 12:28:09 · 14128 阅读 · 0 评论 -
Swift 中 类与结构体的对比(整理自The Swift Programming Language中文完整版)
Switf 中类和结构体有很多共同点:1. 定义属性用于储存值2. 定义方法用于提供功能3. 定义下标用于通过下标语法访问值4. 定义初始化器用于生成初始化值5. 通过扩展以增加默认实现的功能6. 符合协议以对某类提供标准功能与结构体相比,类还有以下附加功能:1. 继承允许一个类继承另一个类的特征2. 类型转换允许在运行时检查和解释一个类实例的类型...原创 2014-07-07 14:45:45 · 1110 阅读 · 0 评论 -
Mantle with CoreData
PS:网上流传的最多的一篇关于Mantle的文章,但是大家都没注明作者,有谁知道的可以留言下,我会补充上去。Mantlemakes it easy to write a simple model layer for your Cocoa or Cocoa Touch application.Mantle can still be a convenient translation l...转载 2014-11-24 10:41:02 · 998 阅读 · 0 评论 -
多种Cell的CollectionView
制作拥有两个Cell的TableView还是比较容易的,创建一个拥有多种类型Cell的CollectionView还是需要一点设计的。首先需要创建一个继承UICollectionViewFlowLayout的layout,用来指定不同的cell在CollectionView中如何正确的显示。需要实现的方法:(CGSize)collectionViewContentSiz...原创 2014-12-13 11:28:06 · 3837 阅读 · 0 评论 -
CoreData渐进式迁移
渐进式迁移创建MappingModel创建一个迁移文件(.xcmappingmodel),指定需要迁移版本与目标版本。在Mapping中可以使用NSEntityMigrationPolicy实现自定义数据迁移。APP启动后,检测数据库是否需要迁移。1. 调用NSPersistentStoreCoordinator,获取当前Model(NSManagedObjectModel)的MetaD...原创 2019-02-20 15:18:57 · 261 阅读 · 0 评论