策略模式的实例代码demo
策略模式的实例代码demo
责任链VS金融登录校验
对于责任链的思考,对于金融登录校验的思考
AScheme跳转到BScheme配置
AScheme跳转到BScheme配置
注:截图四张,只是从AScheme跳转到BScheme的配置;但是两个工程的代码是AScheme跳转到BScheme,并支持了从BScheme跳转到AScheme
ios解析crash示例文件上传
ios解析crash示例文件上传
YHELKitSDK-master.zip
ios加解密 AES:128/192/256; RSA; Base64;MD5
yfc.zip 证书测试APNS
yfc.zip 证书测试APNS
fastLane.zip
ios单工程自动打包,简单写下我使用fastlane的过程,及遇到的问题,希望自己下次在用到fastlane的时候能迅速避坑,希望也能帮助在看文章的你
cocoapodsAndFramework
把组件打包成静态framework,分别做成sdk拖拽到本地工程及将此framework进行cocoapods管理使用的异同,两种方式图片和xib的取出路径不同
深拷贝与浅拷贝;copy与mutableCopy;容器类型的深拷贝;copy和strong;
1、只有NS类型调用copy方法才是浅拷贝,其他的情况全是深拷贝
2、容器类调用copy或mutableCopy能出现的深拷贝的情况下,只是容器的深拷贝,而非容器内元素的深拷贝
3、无论是声明NSString还是NSMutableString类型的属性时,我们希望此属性被赋值为NSMutableString类型的字符串后,此属性不会因这个可变类型字符串的改变而改变(这也是多数情况下的用法),那就用copy修饰属性
respondsToSelector与instancesRespondToSelector
1、二者的作用相同:都是判断某个类是否实现了某方法(注意:是是否实现某方法,必须在.m里写了{}的方法,只在.h里声明了不算)
2、有实际意义的组合只有3种
@1 类 + instancesRespondToSelector + 实例方法 yes = 类是否实现了某实例方法
@2 类 + respondsToSelector + 类方法 yes = 类是否实现了某类方法
@3 实例 respondsToSelector 实例方法 yes = 类是否实现了某实例方法
且@1和@3的作用相同
UIWebView原生与H5交互
UIWebView原生与H5交互,pre;confirm;等包含三个H5页面跳转的交互demo
WKWebView原生与H5交互
为防止造成混淆,这里只写WKWebView原生与H5交互关键代码
h5余原生交互
1、H5调原生:1》通过代理调原生 2》block调原生方法 2、javaScriptCore版原生调H5 1》用evaluateScript方法直接调用 2》objectForKeyedSubscript + callWithArguments 方法调用
dispatch_barrier_(a)sync
异步和同步的栅栏函数都有以下特点:
1、通过dispatch_barrier_(a)sync添加的block会等待前边所有的block执行完(不包括回调)才执行。
2、在其后添加的block会在dispatch_barrier_(a)sync添加的block执行完之后(不包括回调)再执行;
不同点:
1、dispatch_barrier_sync:同步栅栏函数在原线程中执行block,不开辟新线程;在将任务插入到queue的时候, dispatch_barrier_sync需要等待自己的任务结束之后才会继续程序,然后插入被写在它后面的任务。
2、dispatch_barrier_async:异步栅栏函数会开辟新线程执行block;ispatch_barrier_async将自己的任务插入到queue之后,不会等待自己的任务结束,它会继续把后面的任务插入到queue。
gcd处理ios多请求常用的几种情况
//1、进某页面要发四个请求,四个请求之间无影响
//2、进某页面要发四个请求,四个请求之间无影响,等所有请求回来刷新界面
//3、进某页面要发四个请求,其中某个请求的请求参数是另一个请求结果的返回字段(请求2依赖于请求1的回调结果)
//4、进某页面要发四个请求,其中某个请求的两个请求参数是另两个请求结果分别返回的两个字段(请求3依赖请求1、2的回调结果)
//5、进某页面要发四个请求,请求3依赖请求2的回调结果,请求2依赖于请求1的回调结果
//6、进某页面要发100个请求
dispatch_semaphore two
ios开发GCD的dispatch_semaphore:1、常用函数及作用 2、信号量的用途:1》同步不同线程 2》当做锁来使用:3》控制同时执行的线程数:
dispatch_semaphore
//信号量用途1://两个资源,三个线程执行;设定信号量值为2,先执行两个线程,等执行完一个,才会继续执行下一个,保证同一时间执行的线程不超过两个,保证线程的最大并发数
//信号量用途2://创建信号量的时候当锁使,保证wait和signal之间只有一个线程能进去
//信号量用途3:同步不同线程的操作
dispatch_group包含wait包含forever时长
两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都不会出现这种状况。这也是dispatch_group的一个坑人的地方。我们在使用dispatch_group时一般都是想异步执行任务,所以,一定要注意这个坑
dispatch_group包含wait
以上两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都不会出现这种状况。这也是dispatch_group的一个坑人的地方。我们在使用dispatch_group时一般都是想异步执行任务,所以,一定要注意这个坑
dispatch_group
两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都不会出现这种状况。这也是dispatch_group的一个坑人的地方。我们在使用dispatch_group时一般都是想异步执行任务,所以,一定要注意这个坑
NSPredicate
NSPredicate的使用总结,OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据