离线数据的方法选择 plist文件 Document路径 数据库 由于保存的是大批量数据,且会不停的刷新新数据,因此应该选择数据库来存储。使用数据库可以快速地进行数据的读取操作。...1.设计思路 如下图,说明了离线缓存的流程: ?...离线缓存 当第一次打开app的时候,把从服务器获取到的数据保存到沙盒中; 当下一次进入app的时候,首先从沙盒中找,如果沙盒中保存了之前的数据,则显示沙盒中的数据; 如果没有网络,直接加载保存到沙盒中的数据...示例 下面使用一个示例程序来介绍离线缓存。示例程序用到的框架有FMDB,SDWebImage,AFNetworking,数据是由聚合数据提供的开放API。
离线缓存 为了用户的体验,不需要每次打开App都加载新数据,或者重新请求数据,因此需要把每次浏览的数据保存起来,当下次打开软件时,首先从沙盒中加载数据;或者当软件未联网时,也只能从沙盒中加载旧数据。...离线数据的方法选择 1.plist文件 2.Document路径 3.数据库 由于保存的是大批量数据,且会不停的刷新新数据,因此应该选择数据库来存储。...离线缓存的思路 当第一次打开应用程序时,把界面加载好的数据保存到沙盒中 当下一次进入应用程序时,首先从沙盒中找 如果没有网络,直接加载上次保存的数据,或者没有比较新的数据也从沙盒中加载数据。
runtime API中所有char类型都是以UTF-8编码的 以上是文档中对runtime做的一些简单介绍 经过之前看过的其他人对runtime的经验总结和自己的实践, 目前对Runtime的概念: 消息动态解析...消息重定向 消息转发 动态解析 在运行时(程序运行中)动态地: 给类中的已经定义但尚未实现的方法, 动态地绑定实现方法 给类增加或绑定既未定义也未实现方法, 说简单就是给类增加方法 文档中接下来是runtime...: id objc_msgSend(id self, SEL _cmd, …); 当对象接收到消息时会按照以下顺序依次检查, 在任何一个环节如果被响应则结束 否则报错 -> 对象接收到消息 -> 查看缓存中是否有匹配的方法...- (id)forwardingTargetForSelector:(SEL)aSelector, 如果有指定消息接收对象则将消息转由接收对象响应 否则继续 ->开始消息转发 - (void)forwardInvocation...我们可以重写- (id)forwardingTargetForSelector:(SEL)aSelector将消息重定向给可以响应的对象 1 /** 2 方法重定向 3 4 @param
今天发生的问题:消息队列报错,实时消息没有发送成功,重启后问题消失。 ? 继续看其他的错误日志: ? ? 消息队列采用公司统一的apache qpidd集群。...SwiftSendMsgTask是我当初自己设计的一个对象连接池,目的在于如果消息的发送和正常向消息队列里组装消息是同步的,会造成第一实行性不能保证,因为有的专辑下面有几万个视频,必须组装成一个消息发送...所以我就直接异步发消息,从对象连接池中取出一个处理发消息的处理对象扔进去,直接处理下一个。如果处理消息的空闲对象不够用我就直接新建一个放到连接池里。...一直想好好总结一下离线数据的程序,因为这个程序整个架构基本上很原始,资源的调度分配都是程序自己控制的,基本没用什么现成的技术。...因为这个离线服务半夜有个跑全量的,我会起1000多个线程来跑,但是每次处理数据的线程池是50,因为这个环节要涉及大量CPU计算数据库连接,虽然是高配物理机,而且数据库是专门将线上数据实时复制的一个从库,
二、典型离线消息表的设计以及拉取离线消息的过程 ① 存储离线消看书的表主要字段大致如下: -- 消息接收者ID receiver_uid varchar(50), -- 消息的唯一指纹码(即消息ID...)中把离线消息删除; Stelp 4:服务器返回给用户B想要的离线消息。...五、优化离线消息的拉取过程,保证离线消息不会丢失 如何保证可达性,上述步骤第三步执行完毕之后,第四个步骤离线消息返回给客户端过程中,服务器挂点,路由器丢消息,或者客户端crash了,那离线消息岂不是丢了么...如同在线消息的应用层ACK机制一样,离线消息拉时,不能够直接删除数据库中的离线消息,而必须等应用层的离线消息ACK(说明用户B真的收到离线消息了),才能删除数据库中的离线消息。...六、进一步优化,解决重复拉取离线消息的问题 如果用户B拉取了一页离线消息,却在ACK之前crash了,下次登录时会拉取到重复的离线消息么?
) 问题:离线消息表的设计,拉取离线的过程?...整体流程如上图所述, (1)用户B拉取用户A发送给ta的离线消息 (2)服务器从DB中拉取离线消息 (3)服务器从DB中把离线消息删除 (4)服务器返回给用户B想要的离线消息 问题:上述流程存在的问题?...如同在线消息的应用层ACK机制一样,离线消息拉时,不能够直接删除数据库中的离线消息,而必须等应用层的离线消息ACK(说明用户B真的收到离线消息了),才能删除数据库中的离线消息。...问题:如果用户B拉取了一页离线消息,却在ACK之前crash了,下次登录时会拉取到重复的离线消息么? 回答:拉取了离线消息却没有ACK,服务器不会删除之前的离线消息,故下次登录时系统层面还会拉取到。...SMC理论:系统层面无法做到消息不丢不重,业务层面可以做到,对用户无感知。 ? 问题:假设有N页离线消息,现在每个离线消息需要一个ACK,那么岂不是客户端与服务器的交互次数又加倍了?
OC中给nil对象发送消息程序是否会crash? OC想nil发送消息,是不会崩溃的。...OC的函数调用都是通过objc_msgSend进行消息发送来实现,相对于C/C++来说,操作空指针引起crash问题,objc_msgSend通过判断self来决定是否发送消息,self为nil,那么selector...向nil发消息可能会返回nil(对象)、0(基础数据类型)或0x0(id类型),但对[NSNull null]对象发消息时,会造成crash,因为NSNull类只有一个null方法。...objc向一个对象发送消息[obj foo]和objc_msgSend()函数之间有什么关系? objc_msgSend()是[obj foo]的具体实现。...直接调用该方法,就算实现了要调用的方法,也不会被调用,会直接走消息转发步骤
前言 iOS消息推送分两种,本地推送和远程推送。本地推送是由本地应用触发的,是基于时间的通知形式,不通过网络,直接安装应用后就可以接到通知,一般用于闹钟定时、待办事项等提醒功能。...主要从iOS远程消息推送过程以及客户端如何处理推送消息的开发实现逻辑两方面来展开,最后梳理一下iOS消息推送测试时需要关注的点。 1.iOS消息推送过程 ?...如上是iOS消息推送的详细流程图,主要分为几个过程: (1)App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS...content-available:此字段为 iOS 7 silent remote notification 使用。不使用此功能时无需包含此字段。...4.消息推送功能测试 了解了消息的开发实现流程后,小编总结了消息推送测试时需要关注的点,希望对你有所启发: (1)消息推送对象 消息推送一般可以自定义推送对象,有全部推送,精确推送,及安卓和IOS渠道推送
最近终于找到了一款 iOS 上支持 markdown 的工具了。...MWeb 使用 MWeb 离线发表博客的方法: 在设置中增加发布服务 发布服务选择 Metaweblog API 在 Metaweblog API 中填入博客信息 博客地址:https://eallion.com
、理解objc_msgSend的作用 对象上调用方法用OC的术语,叫做“传递消息”。消息有名称或选择子,可以接受参数,而且可能还有返回值。 先理解C语言的函数调用方式。...在Objective-C中,如果向某对象传递消息,那就会使用动态绑定机制来决定需要调用的方法。...:选择子(选择器) 选择子与参数合起来称为“消息” 编译器看到此消息后,将其转换成一条标准的C语言函数调用,所调用的函数乃是消息传递机制中的核心函数,叫做objc_msgSend,其“原型”如下:...这样的话,你就会明白,在发送消息时,代码究竟是如何执行的,而且也能理解,为何在调试的时候,栈“回溯”信息中总是出现objc_msgSend。 要点 1️⃣消息由接受者、选择子及参数构成。...2️⃣发给某对象的全部消息都要由“动态消息派发系统”来处理,改系统会查出对应的方法,并执行其代码。
那么在ios10之前,ios的消息推送是怎么分类的呢?...ios 10之前 在ios之前,iOS推送分为Local Notifications(本地推送) 和 Remote Notifications(远程推送)。...要实现远程推送,一般会涉及到三个阶段: APNS Pusher应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。...APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。 iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。...多媒体 在此次版本中,iOS10 不仅新增消息的3dtouch等,还对图片、音频、视频等多媒体做了改进和优化。
消息转发 机制,程序员可经由此过程告诉对象应该如何处理未知消息。...此时,运行期系统会请求接受者以其他手段来处理与消息相关的调用方法。这又细分为两小阶段。首先,请接受者看看有没有其他对象能处理这条信息。若有,则运行期系统会把消息转给那个对象,于是消息转发过程结束。...若没有“备援的接受者”,则启动完成的消息转发机制,运行期系统会把与消息有关的细节全部封装到NSInvocation对象中,让接受者最后一次设法解决当前还未处理的这条消息 2.1动态方法解析 对象接收到无法解读的消息后...若是想在发送给备援接受者之前先修改消息内容,那就通过完整消息转发机制来做。...在触发NSInvocation对象时,“消息派发系统”将会把消息指派给目标对象。
文章目录 一、OC中的消息 二、消息查找 三、消息转发 1、动态方法解析 2、备援接收者(receiver) 3、完整的消息转发 一、OC中的消息 在对象上调用方法是Objective-C中常使用的功能...,用OC的术语来说,叫“传递消息”(pass a message)。...选择子与参数合起来称为“消息”(message)。...---- 三、消息转发 消息转发机制流程图如下: 。 系统给了三次补救的机会。...3、完整的消息转发 如果转发算法来到这一步的话,唯一能做的就是启用完整的消息转发机制了。
)中把离线消息删除; Stelp 4:服务器返回给用户B想要的离线消息。...这方面的文章,可以进一步参阅《谈谈移动端 IM 开发中登录请求的优化》、《移动端IM实践:iOS版微信界面卡顿监测方案》、《移动端IM实践:Android版微信如何大幅提升交互性能(二)》。...8、优化离线消息的拉取过程,保证离线消息不会丢失 如何保证可达性,上述步骤第三步执行完毕之后,第四个步骤离线消息返回给客户端过程中,服务器挂点,路由器丢消息,或者客户端crash了,那离线消息岂不是丢了么...如同在线消息的应用层ACK机制一样,离线消息拉时,不能够直接删除数据库中的离线消息,而必须等应用层的离线消息ACK(说明用户B真的收到离线消息了),才能删除数据库中的离线消息。...9、进一步优化,解决重复拉取离线消息的问题 如果用户B拉取了一页离线消息,却在ACK之前crash了,下次登录时会拉取到重复的离线消息么?
消息相关 消息推送客户端 SGPushDemo - 消息推送客户端 Orbiter - 消息推送客户端:iOS推送通知注册。...PushDemo - 客户端消息接收消息代码,IOS开发之---- IOS8推送消息注册 ,分分钟搞定IOS远程消息推送。...消息推送服务端 javapns源代码 - 消息推送的java服务端代码,注意:DeviceToken中间不能有空格。...pushMeBaby - Mac端消息推送端代码,注意:DeviceToken中间要有空格。
消息发送和消息转发流程可以概括为: 消息发送是 Runtime 通过 selector 快速查找 IMP 的过程,有了函数指针就可以执行对应的方法实现; 消息转发是在查找 IMP 失败后执行一系列转发流程的慢速通道...该消息的唯一参数是个 NSInvocation 类型的对象——该对象封装了原始的消息和消息的参数。...它可以将一个消息翻译成另外一个消息,或者简单的”吃掉“某些消息,因此没有响应也没有错误。 forwardInvocation: 方法也可以对不同的消息提供同样的响应,这一切都取决于方法的具体实现。...该方法所提供是将不同的对象链接到消息链的能力。 注意: forwardInvocation: 方法只有在消息接收对象中无法正常响应消息时才会被调用。...接下来,我们要通过一个小例子来简单、通俗的理解一下什么是消息转发以及如何消息转发,希望看完这篇文章时大家会彻底的明白OC的消息。 上一篇消息发送,我们知道Objective-C语言动态语言。
由上面一章中,我们了解了什么是RunTime的数据结构,下面了解一下Runtime的消息发送。...(这就是我们可以向nil发送消息的原因。) 然后在target的Class中根据Selector去找IMP。...消息的发送其实就是先确定object接受者对象,然后根据isa指针查找其方法然后跳转过去并执行。 但是编译期间,是无法确定object接受者对象。...消息发送的设计使得编译期间Objective-C非常包容对象所属的类。在Objective-C语言中你可以向任何包括空指针nil在内的对象发你想发的消息。...消息发送的机制使得在不重新编译的情况下,在运行期间,干预或者说hook原来的target(方法、变量等)变得更易于实现,更有实际应用价值,这个是需要依赖于消息发送和动态绑定的实现机制——Runtime。
前言: iOS进阶之传递消息 上篇讲到消息传递,其中有个问题:对象在收到无法解读的消息之后会发生什么情况? 若想令类能理解某条消息,我们必须以程序码实现出对应的方法才行。...当对象接收到无法解读的消息后,就会启动“消息转发”机制,程序员可经此过程告诉对象应该如何处理位置消息。 ?...若有,则运行期系统会把消息转给那个对象,于是消息转发过程结束,一切如常。...请注意,我们无法操作经由这一步所转发的消息。若是想在发送给备援接收者之前先修改消息内容,那就得通过完整的消息转发机制来做了。...消息转发全流程 ? 消息转发机制步骤 接收者在每一步中均有机会处理消息。步骤越往后,处理消息的代价就越大。最好能够在第一步就处理完,这样的话,运行期系统就可以将此方法缓存起来了。
前言 IOS底层原理之动态方法决议中探究了动态方法决议。...在动态决议之后,通过日志辅助功能认识到forwardingTargetForSelector和 methodSignatureForSelector方法,也就是消息发送的最后一个流程消息转发。...准备工作 objc4-818.2 源码 CF 源码 反汇编工具Hopper和ida 消息转发 消息发送在经过动态方法决议仍然没有查找到正真的方法实现,此时动态方法决议抛出imp = forward_imp...进入消息转发流程。...forwardInvocation方法就像一个不能识别的消息的分发中心,它能够将一个消息翻译成另外一个消息,或者简单的"吃掉“某些消息。
领取专属 10元无门槛券
手把手带您无忧上云