
iOS
文章平均质量分 79
qcxNick123
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于MBProgressHUD自定义帧动画
现在很多APP的HUD已经都是自定义动画了,MBProgressHUD没有开放的API可以让我们直接使用,需要到.m文件中去修改源码。首先在.m文件中找到- (void)updateIndicators方法在if (mode == MBProgressHUDModeIndeterminate) {}中自定义动画,然后上代码:if (mode == MBP原创 2016-01-29 09:29:41 · 5510 阅读 · 4 评论 -
iOS编程思想
一、链式编程通过点语法,将所有的方法串联,返回所需要的结果,即 结果 = 对象.方法.方法.方法。这样会是代码更加易读,甚至看起来像swift的语法。Test * test = [[Test alloc] init]; int sum = test.add(10).add(20).result; NSLog(@"%d", sum); 结果 sum=30原创 2016-04-19 13:44:05 · 454 阅读 · 0 评论 -
iOS与JaveScript的交互
iOS的webView与H5中的JS交互在UIWebView中,OC调JS,这里使用JavaScriptCore这个框架;多余代码就不写了,只写关键代码,在UIWebView的代理方法-(void)webViewDidFinishLoad:(UIWebView *)webView中实现。-(void)webViewDidFinishLoad:(UIWebView *)webView原创 2016-07-28 21:22:14 · 537 阅读 · 0 评论 -
@synchronized 锁用法
synchronized 这个主要是考虑多线程的程序,这个指令可以将{ } 内的代码限制在一个线程执行,如果某个线程没有执行完,其他的线程如果需要执行就得等着。Objective-C支持程序中的多线程。这就意味着两个线程有可能同时修改同一个对象,这将在程序中导致严重的问题。为了避免这种多个线程同时执行同一段代码的情况,Objective-C提供了@synchronized()指令。原创 2016-08-02 15:16:26 · 508 阅读 · 0 评论 -
使用AFNetworking3.0实现接口异步并发
近两个月,因为团队后台的动荡,项目新版本的接口非常乱,出现一个tableView需要几个接口来获取数据源的情况。这就需要在几个接口并发请求完后一起回调处理。因为项目中使用的是AFN的网络框架,所以,这个需求只能基于AFN去实现一般,我们在使用AFN的网络请求时,是利用- (NSURLSessionDataTask *)POST:(NSString *)URLString原创 2016-08-24 17:52:10 · 6232 阅读 · 0 评论 -
利用函数式编程和链式编程封装富文本
现在APP的开发中,UI为了是页面更加漂亮,文字更加饱满,经常会出现使用到富文本的场景。在实际开发中,富文本(NSAttributedString)在写代码时非常麻烦。针对不同范围内的文字,添加不同的富文本属性,可能只是短短几行文字,却要通过几十行甚至上百行代码去实现。比如这样NSMutableAttributedString *AttributedStr = [[NSMutableAttrib原创 2017-03-07 23:33:54 · 919 阅读 · 0 评论 -
Swift中performSelector返回值的用法
最近使用swift,翻译OC的代码时,发现performSelector的返回值与OC中的用法相差很大。在OC中返回的是ID类型,而swift中返回的是 Unmanaged! 类型,见下图。在以前OC中,使用performSelector,直接接受返回值,然后转成需要的类型进行操作就可以了,但是在swift中是不行的,下面是按OC直接翻译成swift的代码,基本原理是target-ac原创 2017-08-09 15:30:02 · 8084 阅读 · 0 评论 -
Swift通过协议实现AOP
什么是AOPAOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面编程,是目前软件开发中的一个热点。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 。 主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。 主要的意图原创 2017-08-25 15:17:12 · 3886 阅读 · 0 评论 -
Swift泛型在协议中的使用
protocol TestProtocol { associatedtype TestElement func run(_ param: TestElement)}class TestObject: TestProtocol { typealias TestElement = Int func run(_ param: Int) {原创 2017-09-06 14:47:15 · 1338 阅读 · 0 评论 -
swift Codable的使用及简单封装
swift在4.0之前,一直没有一套数据解析的方法。现在4.0后,终于有了Codable可以直接将json转成对象,有望取代OC的KVC机制。 先来看看Codablepublic typealias Codable = Decodable & Encodable 基本使用它和NSCoding很像,可以重写decoder和encoder。基本的使用很简单class Pe原创 2018-01-08 17:10:26 · 10541 阅读 · 2 评论 -
NSURLSession实现图片下载
本文主要介绍使用NSURLSession来实现图片下载,分别是带缓存的下载和无缓存下载1.带缓存下载 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[self preventNotRecognizedCharactersWithUrl:url]] cac原创 2016-02-04 13:22:54 · 1163 阅读 · 0 评论 -
GCD定时器
在上一篇关于RunLoop的文章中,定时器是需要在开启runloop的线程中才能工作。但是,runloop是一直在循环运行,监听所有的source,timer和selector的。所以,在运行定时器的时候,runloop可能还需要处理其他事件,因此会造成定时器的一些误差,如果我们想让定时器脱离runloop,那么,这里有一种GCD的定时器可以使用,话不多少,直接上代码,已经写好详细注释:@in原创 2016-04-26 09:53:33 · 569 阅读 · 0 评论 -
NSURLSession的POST请求及封装
刚简单的学习了一下NSURLSession,于是对NSURLSession进行了简单的POST请求封装,有什么不足的请提出,也希望对别人有所帮助原创 2016-02-02 16:41:30 · 601 阅读 · 0 评论 -
NSTimer在tableView中的复用问题
之前,有位朋友,在写商品倒计时是,因为定时器在tableview上总是被复用,使改界面拖延了很久,最好找我写了个demo才解决。之后,还有不少iOS的朋友遇到类似复用的问题。这里只讲我这个demo中的关键代码及对复用的理解,demo的下载链接在文章最后。(如有不足请提出)首先讲讲tableview的复用:cell在创建的时候,只会创建设备屏幕可见的cell个数,而不是按照你的数据源中的原创 2016-02-03 10:02:04 · 1296 阅读 · 0 评论 -
tableview的代理分离,帮助控制瘦身
刚刚看了一个关于iOS设计模式的文章,里面提到了tableView代理分离的一种控制器瘦身模式,也可以理解为MVVM模式的一部分,参考点击打开链接。这里我先简单的将一下这分离过程。先创建一个代理类.h文件#import #import typedef void(^SelectCell)(NSIndexPath * indexPath);@interface TableVi原创 2016-03-17 14:04:04 · 861 阅读 · 0 评论 -
代理传值iOS9与之前版本的区别——提前释放
这几天,项目第一阶段进入收尾和测试阶段了,之前测试时,所有的设备都是iOS9的,这次用iOS8测试时,自定义封装的弹出框出现了响应代理事件和代理传值时崩溃的情况,用iOS7也是这样。首先,我检查了代码,发现没有iOS9以后的代码,说明代码的版本兼容本身是没有问题。先上一段代码:自定义弹出框.h文件#import typedef NS_ENUM(NSInteger, AlertSta原创 2016-03-11 13:56:21 · 1204 阅读 · 0 评论 -
Runtime学习笔记(一)——成员变量和属性
最近开始学习runtime,想挖掘iOS的运行机制,经过几天折腾,终于初窥门径,首先记录关于成员变量和属性的学习内容1.获取成员变量Ivar: 实例变量类型,是一个指向objc_ivar结构体的指针 typedef struct objc_ivar *Ivar;model的声明:#import @interface Model : NSObject{原创 2016-03-24 14:46:49 · 478 阅读 · 0 评论 -
iOS学习笔记--瀑布流封装
最近学习了瀑布流布局,是用collectionView实现的。首先说说设计思路,用collectionView做出来的瀑布流是固定行数或者列数的。以现在主流固定列数为例,每个item就是固定宽,不固定高,同时每个item之间的间距是固定的,那么每行的Y值计算就需要通过前一行的最短的item来确定。既然是用collectionView实现,而collectionView的布局是通过他的layou原创 2016-04-07 11:01:47 · 492 阅读 · 0 评论 -
iOS 图片模糊处理和自动获取图片尺寸
1.图片模糊处理:方法一:+ (UIImage *)coreBlurImage:(UIImage *)image withBlurNumber:(CGFloat)blur { CIContext *context = [CIContext contextWithOptions:nil]; CIImage *inputImage=[CIIma原创 2016-03-25 16:20:28 · 1096 阅读 · 1 评论 -
NSException异常处理
当我们的项目上线后,想收集用户的崩溃信息主要有两种方式,一种是借第三方平台的统计,还有一种就是自己统计,上传服务器。这里就讲讲自己使用NSException统计崩溃信息。在main.m中 @try { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromCl原创 2016-04-25 17:28:32 · 2263 阅读 · 0 评论 -
RunLoop浅谈
一、什么是RunLoop运行循环,基本作用:保持程序的持续运行,处理App中的各种事件(比如触摸事件、定时器事件、selector事件),节省CUP资源,提高程序性能,即该做事时做事,该休息时休息。RunLoop在运行时只能选择一种模式。二、在Core Foundation中RunLoop有5个类:1.CFRunLoopRef2.CFRunLoopM原创 2016-04-25 17:57:50 · 573 阅读 · 0 评论 -
iOS组件化——源码与二进制的平滑切换
背景刚加入新的公司,接触到新公司的代码以后,心中是一篇翻江倒海,不是因为项目代码有多优秀,多牛逼,而是因为这是一个7年的老项目,期间经历过不知多少个程序员的手,项目简直是面目全非,各种重复的第三方库,代码耦合严重,不同时期的代码风格及开发模式完全不一样,造成项目过大,编译花费很多时间。现在的同事们正在想办法优化项目,在使用组件化的发开模式,减少与项目中老代码及第三方重复库的耦合。因此,一些老的...原创 2018-07-21 18:07:36 · 3405 阅读 · 2 评论