加菲猫的小窝
这个作者很懒,什么都没留下…
展开
-
swift中escaping与noescaping之区别
1.@escaping标明这个闭包是会“逃逸”,通俗点来讲,这个闭包的作用域可能超过该函数的作用域,也就是说,该闭包在函数执行完成之后才被调用。2.标明非逃逸的闭包的作用域是不会超过函数作用域的,甚至我们不需要担心在闭包内持有self,超过了作用域引发的问题。...原创 2022-07-31 18:48:42 · 555 阅读 · 0 评论 -
Escaping closure captures non-escaping parameter ‘xx‘
新版的Swift闭包做参数默认是@noescaping,不再是@escaping。如果函数里执行该闭包,要添加@escaping。原创 2022-07-31 18:43:40 · 928 阅读 · 0 评论 -
解决Masonry 中equalTo和mas_equalTo 乱用的问题
其实 mas_equalTo是一个MACRO,比较的是值,equalTo比较的是view。注意如下方式引入会和自定义View约束冲突引发异常!所以还是建议老老实实的不要用如下宏定义;// 只要添加了这个宏,就不用带mas_前缀2 #define MAS_SHORTHAND3 // 只要添加了这个宏,equalTo就等价于mas_equalTo4 #define MAS_SHORTHAND_GLOBALS5 // 这个头文件一定要放在上面两个宏的后面6 #import "Masonry.h".原创 2021-06-15 16:25:51 · 645 阅读 · 0 评论 -
iOS应用处于前台、后台、应用被杀掉场景-收到远程推送内容进行收款语音播报;
iOS应用处于前台、后台、应用被杀掉场景-收到远程推送内容进行收款语音播报;介绍:收银应用两大技术点:远程推送、收款成功语音播报收款金额及其他附带语音内容;顺便点下android语音播报有一个至今无法实现模块:应用被杀掉的情况下,不能像iOS设备一样能够语音播报收款金额及其他收款语音提示内容;iOS收款语音播报-走远程推送应用在前台:收到远程推送直接TTS语音合成是可以的,当然语音文件的形式播报也是可以的;应用在后台:收到远程推送直接TTS语音合成目前是行不通的,苹果大大已经不允许了;原创 2021-06-09 15:54:24 · 667 阅读 · 4 评论 -
IOS WKWebView加载本地H5以及css,js等样式
两点非常坑爹的地方:第一点,就是导入前端给你的h5包的时候导入h5的包这里如果选择第一个,会无法加载js和css样式以及img,因为大部分前端这些东西都是写的绝对路径。如果你要选第一个groups,那么你就要去修改h5里面的路径,非常的繁琐,而且前端维护也很难受。这里选择第二个。导入Create folder references。你会发现是个蓝色的文件夹。然后,不要急着去用你的[NSBundle mainBundle]查找路径,因为这里有个坑。你需要去添加这里加入...转载 2021-05-10 18:49:06 · 1462 阅读 · 0 评论 -
iOS中responseToSelector()方法是不是需要优化
在日常开发中我经常会调用responseToSelector这个方法,尤其是是在我们写的协议的类中我们经常会有这样的判断。最近重新看《编写高质量iOS于OS X代码的52个有效方法》这本书的时候作者提供了不一样的思路,作者认为可以在对象初始化的时候去判断,然后用枚举的方式进行判断,来防止每次查找的过程,提高开发效率,我当时思考的问题是,应该是第一次调用方法之后就存储在了类的方法缓存列表中,之后每次调用responseToSelector()方法都会优先在缓存列表中查找么。当时认为每次查找的算法复杂度O(1)转载 2021-01-15 15:42:29 · 455 阅读 · 0 评论 -
iOS开发多线程-下载合并图片
方法一先下载第1张图片,然后下载第2张图片,最后合并图片弊病:由于图片比较耗时,一张一张的下载图片更耗时。// 异步下载 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 1.下载第1张 NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pi.转载 2021-01-13 16:44:29 · 366 阅读 · 0 评论 -
【iOS系列】-多图片多线程异步下载
多图片多线程异步下载开发中非常常用的就是就是图片下载,我们常用的就是SDWebImage,但是作为开发人员,不仅要能会用,还要知道其原理。本文就会介绍多图下载的实现。本文中的示例Demno地址,下载后项目位于iOS_Demo/09-多图片多线程下载1 - 问题开篇我就先将多图下载过程中出现的问题摆出来,让我们能够一一克服。1:下载过程要放到子线程中,否则会导致UI线程卡顿2:图片会重复下载,我们不仅要把下载完的图片放到内存中,还要把下载队列也缓存起来,否则可能图片没有下载完,会多次创转载 2021-01-13 16:25:19 · 589 阅读 · 0 评论 -
关联对象 AssociatedObject 完全解析
关联对象 AssociatedObject 完全解析 关联 category与associative作为objective-c的扩展机制的两个特性 ✓ category即类型,可以通过它来扩展方法 ✓ associative,可以通过它来扩展属性 ✓ 在iOS开发中,可能category比较常见,相对的associative,就用的比较少,要用它必须使用的头文件,然后就可以自由使用objc_getAssociatedObject以及objc_setAssociatedObject原创 2021-01-04 19:49:52 · 346 阅读 · 0 评论 -
iOS-load/initialize
Object-C源码解析 1.你真的了解 load 方法么? load 作为 Objective-C 中的一个方法,与其它方法有很大的不同。它只是一个在整个文件被加载到运行时,在 main 函数调用之前被 ObjC 运行时调用的钩子方法。其中关键字有这么几个 ✓ 文件刚加载 ✓ main 函数之前 ✓ 钩子方法 调用的顺序 ✓ 1.父类先于子类调用 ✓ 2.类先于分类调用 load 的应用 ✓ load 可以说我们在日常开发中可以接原创 2021-01-04 19:06:22 · 260 阅读 · 0 评论 -
iOS - SocketClient心跳-重连日志-Server使用Java AIO
2020-12-17 16:45:10.698835+0800 SocketClient[48673:4722193] ---主页---2020-12-17 16:45:10.699060+0800 SocketClient[48673:4722193] connctToServer2020-12-17 16:45:10.812228+0800 SocketClient[48673:4722193] - (void)socket:(GCDAsyncSocket *)sock didConnectToH.原创 2020-12-17 16:57:51 · 288 阅读 · 0 评论 -
iOS 进程/线程间通信
进程/线程间通信iOS 进程间通信8种方式1、URL scheme- [x] 这个是iOS APP通信最常用到的通信方式,APP1通过openURL的方法跳转到APP2,并且在URL中带上想要的参数,有点类似HTTP的get请求那样进行参数传递。这种方式是使用最多的最常见的,使用方法也很简单只需要源APP1在info.plist中配置LSApplicationQueriesSchemes,指定目标App2的scheme;然后再目标App2的info.plist 中配置好URLtypes,表示该Ap原创 2020-12-11 15:20:44 · 999 阅读 · 0 评论 -
iOS - Runtime 总结 by:nixs
```001-iOS 开发:『Runtime』详解(一)基础知识 见:有道云笔记、总结思维导图应用案例:-proj_2020/006Runtime002-iOS 开发:『Runtime』详解(二)Method Swizzling(动态方法交换) 见:有道云笔记、总结思维导图应用案例:-NIiOS_GitHub/proj_2020/024YSC-Runtime-MethodSwizzling/Runtime-MethodSwizzling02Runtime运行时系统中最具争议的黑魔法:Meth.原创 2020-12-11 13:55:09 · 373 阅读 · 0 评论 -
iOS - RunLoop总结 by:nixs
详细示例代码github仓库总结:NIiOS##### (二十) iOS RunLoop```Runloop RunLoop的应用 - [x] 常驻线程 NSTimer - [x] 1. 定时器的使用 - [x] 2. 滑动时失效 - [x] 3. 不准时 - [x] AutoreleasePool - [x] 事件响应 - [x] 手势识别 - [x] 界面更新 PerformSelecter // 1.和RunLoop不相干,底层直接调用原创 2020-12-11 13:53:13 · 285 阅读 · 0 评论 -
NiiOS-iOS复习及在学习进度更新
仓库地址NiiOS(一) 简介 & 规划i、「目前主要做iOS客户端开发」一直没有好好沉淀记录下自己学习东西;这里把目前主要做的iOS端常用知识点总结下,便于后续开发拿来直接用;ii、后续会陆续贴出完整的复习笔记,有需要联系作者;(十四) ##### (十三) iOS Runtime复习001-iOS 开发:『Runtime』详解(一)基础知识 见:有道云笔记、总结思维导图应用案例:-proj_2020/006Runtime002-iOS 开发:『Runtime』详解(二原创 2020-11-23 16:53:36 · 842 阅读 · 0 评论 -
iOS本地通知和远程通知的使用
iOS的通知即在方式上分为两种,一种是在开发应用中就固定时间或者固定条件下发送的通知即本地通知;另一种就是远程通知,由开发者向客户端提供的远程通知发送的方式。本地通知 (Local Notification)iOS本地通知是在程序中指定某个时间,或者在多少时间倒计时,或者在特定条件之后,出现在设备的状态栏消息中的功能。iOS为我们提供了几种实现方法,其中最简单的是使用 UILocalNoticification,在iOS 10.0 之后苹果推出了更加强大的 UNUserNotification;原创 2020-09-01 10:04:25 · 493 阅读 · 0 评论 -
iOS 分类(Category)& 扩展(Extension)总结
标题详细参见:NIiOS原创 2020-08-18 10:50:04 · 262 阅读 · 0 评论 -
【扫盲】什么是Runtime?
Runtime又叫运行时,是一套底层C语言的API,其为iOS内部的核心之一,我们平时编写的OC代码底层都是基于它来实现的。Objective-C 是一门动态语言,它会将一些工作放在代码运行时才处理而并非编译时。也就是说,有很多类和成员变量在我们编译的时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。因此,编译器是不够的,我们还需要一个运行时系统(Runtime system)来处理编译后的代码。Runtime 基本是用 C 和汇编写的。Runtime是什么?运行时(Run原创 2020-07-18 14:30:24 · 1735 阅读 · 0 评论 -
runtime从入门到精通(一)—— 初识runtime
很多关于runtime的博客文章都是开篇介绍runtime原理、消息传递机制等等,让好多的同学望而生畏。对于runtime这个强大的略带神秘色彩的独特处理机制,我们需要循序渐进。刚开始接触runtime,先让我们揭开它的神秘面纱,不去想原理,不要想太多,只是简单的认识一下。runtime(运行时机制)是什么runtime是属于OC的底层,是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API,可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)。 在我们平时编原创 2020-07-07 16:52:09 · 372 阅读 · 0 评论 -
runtime获取查看内部成员变量(OC和Swift两种方法获取)
在开发中经常有些需求,凭借着苹果提供的API不好实现,或者实现起来比较麻烦。此时,我们就可以运用runtime来获取类的内部成员变量,然后运用KVC进行替换,来达到目的。下面就贴出运用runtime来获取内部成员变量的方法,以获取UITextView类为例:1>运用Object-C代码实现:unsigned int count = 0; Ivar *vars = class_copyIvarList([UITextView class], &count); .原创 2020-07-02 19:24:43 · 361 阅读 · 0 评论 -
runtime的消息机制
一、runtime的简介:runtime简称运行时。Object-C就是运行时机制也就是运行时候的一些机制。其中最主要的就是消息机制。1>和C语言的区别C语言:函数的调用在编译的时候就决定了调用那个函数。OC语言:它的调用是个动态调用过程,也就是说在编译阶段并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。所以综合如下:1.在编译阶段,C语言在调用未实现的函数就会报错。2.在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声原创 2020-07-02 17:45:49 · 288 阅读 · 0 评论 -
Xcode导入runtime框架函数参数没有提示或Too many arguments to function call, expected 0, have 2错误
首先说明下,在Xcode6之前运用objc_msgSend,是有参数提示的。但是从Xcode6之后,苹果不推荐我们使用runtime,所以就取消了参数提示功能。估计是不想让我们过多的了解底层。Xcode6之后我们运用objc_msgSend函数是这样的:从图中很明显可以看出来是没有参数提示的。我们可以通过对Xcode进行配置进行更改。更改如图:按照如上图的方式操作,搜索msg,并把YES改成NO即可。操作完成后再敲原来的函数就有参数提示功能了。...原创 2020-07-02 17:27:32 · 564 阅读 · 0 评论