基于iOSNSDictionary安全存储数据防止Crash的方法及装置与流程

文档序号:26506723发布日期:2021-09-04 08:53阅读:267来源:国知局
基于iOSNSDictionary安全存储数据防止Crash的方法及装置与流程
基于ios nsdictionary安全存储数据防止crash的方法及装置
技术领域
1.本发明涉及ios移动应用开发技术领域,尤其涉及基于ios移动应用开发中为nsdictionary类型的数据进行安全存储的方法,具体为一种基于ios nsdictionary安全存储数据防止crash的方法及装置。


背景技术:

2.在ios移动应用开发中,针对不同类型的后台数据需要用不同类型的数据结构进行存储,其中nsdictionary是ios移动应用开发中最常用的一种数据类型,基于其独特的哈希结构,其具有数据存取速度快、数据结构稳定、内存占用小等众多优点。nsdictionary数据结构被广泛使用在ios移动应用开发中。
3.随着移动互联网的蓬勃发展,在ios移动应用开发过程中,越来越多的数据类型需要进行处理存储,随之而来的也会带来越来越多的不合规范的脏数据。由于nsdictionary的数据结构特性,当使用nsdictionary对这些脏数据进行处理存储时,大概率会导致ios应用空白、崩溃、闪退等,严重的影响用户体验,大大的降低了用户的留存率。
4.经检索发现,已有部分现有专利提出了对于脏数据的识别或判断,或者脏数据的清洗或过滤,如公开号cn101706791a的中国专利于2010年5月12日公开了一种基于用户偏好的数据清洗方法,其公开了“脏数据”指系统中存在的重复、冗余及错误的数据,这些数据都是数据清洗的对象,因此,“脏数据”识别是数据清洗的重要阶段。公开号cn105512201a的中国专利于2016年4月20日公开了一种数据收集和加工方法,其公开了“根据所述数据格式将所述第一数据进行过滤和清洗,剔除脏数据,得到第二数据”。
5.公开号cn106407345b的中国专利于2020年7月14日公开了一种脏数据更新方法,其公开了“在实际应用中,外部系统对应的服务器上的服务需要不断升级,而升级的时候有可能会更改数据库中存储的某对象对应的数据的数据结构,如,增加某对象的属性,但是,该对象对应的数据在缓存中依然不变,这样会产生脏数据(也就是说,针对任一数据,在缓存中的该数据与数据库中的该数据在数据结构上不一致,则该数据为脏数据),而在本申请中,属性缺失的对象所对应的数据即为脏数据,并且,属性缺失的对象是无法通过外部接口直接提供给外部系统的,需要通过特定的方式去继续查询缺少的属性所对应的数据,因此,在本申请中,面向对象缓存系统在获取到外部系统通过接口传输的对象的属性名和键值后,需要根据对象的属性名,对缓存中的与键值对应的数据进行识别,确定缓存中的与键值对应的数据是不是脏数据”。
6.公开号cn111949641a的中国专利于2020年11月17日公开了一种多级平台间数据清洗与同步方法,其公开了“数据清理服务:根据下级平台数据的唯一标识编号,并通过数据各字段及对应权重计算数据的完整有效性值,判断下级平台数据是否有脏数据,若无脏数据,则启动数据同步服务;若有脏数据,则对脏数据进行数据清理,再启动数据同步服务”。
7.可见,现有专利虽然公开了脏数据的识别、判断、过滤或清洗,但并不能用于解决nsdictionary数据存储时因脏数据导致ios应用空白、崩溃、闪退等问题。


技术实现要素:

8.为克服上述现有技术的不足,本发明提供一种基于ios nsdictionary安全存储数据防止crash的方法及装置,解决nsdictionary在处理脏数据时容易导致应用空白、崩溃、闪退等问题。
9.根据本发明说明书的一方面,提供一种基于ios nsdictionary安全存储数据防止crash的方法,包括:
10.创建分类文件;
11.重写并覆盖系统load函数;
12.替换系统原生的赋值函数;
13.对需要赋值的数据进行安全判断,过滤脏数据;
14.对符合赋值规则的数据,调用替换后的赋值函数进行安全赋值;对不符合赋值规则的数据,进行数据包装后再进行安全赋值;
15.完成存储。
16.上述技术方案中,通过在项目工程中创建nsdictionary分类文件并添加分类文件,可以最大程度的解决项目里面的耦合问题,且不会对原有工程造成任何影响;通过重写覆盖系统load函数、添加脏数据处理函数、替换掉nsdictionary的原生赋值函数的函数指针,使得开发者在完全不知道背后处理逻辑的情况下,能够无感知的调用nsdictionary的原生系统赋值函数并达到安全赋值存储的效果,且保证了数据的安全性,避免nsdictionary在处理脏数据时导致的应用空白、崩溃、闪退等问题。
17.作为进一步的技术方案,所述方法进一步包括:创建nsdictionary分类文件,并在nsdictionary分类文件中添加load()函数、hs_filtalldirtydatavalue:forkey:函数和hs_setvalue:forkey:函数;其中,load()函数用于重写并覆盖系统原生load函数,hs_filtalldirtydatavalue:forkey:函数用于对需要赋值的数据进行安全判断以过滤脏数据,hs_setvalue:forkey:函数用于实现无感知调用nsdictionary的系统原生赋值函数setvalue:forkey:。
18.作为进一步的技术方案,在nsdictionary分类文件中,在load()函数加载时通过ios系统函数class_replacemethod()将nsdictionary中原生函数setvalue:forkey:的imp函数指针替换为hs_setvalue:forkey:的imp函数指针,完成对系统原生赋值函数的替换。
19.作为进一步的技术方案,所述hs_filtalldirtydatavalue:forkey:函数中,对需要赋值的数据进行安全判断进一步包括:
20.对key参数进行验证,若key为非字符串类型,则报错返回,不予赋值;若key为字符串nsstring类型,则进行下一步;
21.对value参数进行验证,若hs_filtalldirtydatavalue:forkey:函数传递过来的value参数为基础数据类型,则进行数据包装后再进行安全赋值;若value参数为对象类型,则直接进行安全赋值;若value参数为空值,则报错返回,不予赋值。
22.作为进一步的技术方案,所述数据包装包括:通过nsnumber的相关函数numberwithfloat:或numberwithint:进行数据包装。
23.作为进一步的技术方案,所述hs_setvalue:forkey:函数的实现逻辑包括:
24.重写覆盖系统load()函数并在load()函数中通过class_replacemethod()函数将nsdictionary的原生函数setvalue:forkey:和hs_setvalue:forkey:进行相互替换;
25.在安全赋值存储之前,通过hs_filtalldirtydatavalue:forkey:函数对原生函数setvalue:forkey:传递过来的参数进行过滤、剔除或包装;
26.得到已经被替换成系统原生函数setvalue:forkey:的hs_setvalue:forkey:函数,直接调用hs_setvalue:forkey:函数本身即可达到调用原生系统函数setvalue:forkey:的赋值效果。
27.根据本发明说明书的一方面,提供一种基于ios nsdictionary安全存储数据防止crash的装置,采用所述的方法实现,所述装置包括:分类文件创建模块,用于创建nsdictionary分类文件;重写模块,用于重写并覆盖系统load函数;替换模块,用于替换系统原生的赋值函数;过滤模块,用于对需要赋值的数据进行安全判断,过滤脏数据;赋值模块,用于对符合赋值规则的数据,调用替换后的赋值函数进行安全赋值;数据包装模块,用于对不符合赋值规则的数据,进行数据包装后再进行安全赋值;存储模块,用于对安全赋值后的数据进行存储。
28.上述技术方案中,通过分类文件创建模块创建nsdictionary分类文件,通过添加分类文件,可以最大程度的解决项目里面的耦合问题,且不会对原有工程造成任何影响;通过重写模块重写覆盖系统load函数,通过替换模块替换系统原生赋值函数,通过过滤模块过滤脏数据,通过赋值模块对符合赋值规则的数据进行安全赋值,通过数据包装模块对不符合赋值规则的数据进行数据包装,通过存储模块对安全赋值后的数据进行存储;该技术方案通过重写模块、替换模块、过滤模块、赋值模块的相互作用,使得开发者能够无感知的调用nsdictionary的原生系统赋值函数并达到安全赋值存储的效果,并保证数据的安全性,防止应用crash,提升用户体验。
29.作为进一步的技术方案,所述替换模块进一步包括:在重写后的系统load函数中通过class_replacemethod()函数将nsdictionary的原生函数setvalue:forkey:替换为hs_setvalue:forkey:函数。
30.作为进一步的技术方案,所述过滤模块进一步包括:对key参数进行验证,若key为非字符串类型,则报错返回;若key为字符串nsstring类型,则进行下一步;对value参数进行验证,若hs_filtalldirtydatavalue:forkey:函数传递过来的value参数为基础数据类型,则进行数据包装后再进行安全赋值;若value参数为对象类型,则直接进行安全赋值;若value参数为空值,则报错返回,不予赋值。
31.作为进一步的技术方案,所述数据包装模块进一步包括:通过nsnumber的相关函数numberwithfloat:或numberwithint:进行数据包装。
32.与现有技术相比,本发明的有益效果在于:
33.(1)本发明提供一种方法,通过在项目工程中创建nsdictionary分类文件并添加分类文件,可以最大程度的解决项目里面的耦合问题,且不会对原有工程造成任何影响;通过重写覆盖系统load函数、添加脏数据处理函数、替换掉nsdictionary的原生赋值函数的
函数指针,使得开发者在完全不知道背后处理逻辑的情况下,能够无感知的调用nsdictionary的原生系统赋值函数并达到安全赋值存储的效果,且保证了数据的安全性,避免nsdictionary在处理脏数据时导致的应用空白、崩溃、闪退等问题。
34.(2)本发明提供一种系统,通过分类文件创建模块创建nsdictionary分类文件,通过添加分类文件,可以最大程度的解决项目里面的耦合问题,且不会对原有工程造成任何影响;通过重写模块重写覆盖系统load函数,通过替换模块替换系统原生赋值函数,通过过滤模块过滤脏数据,通过赋值模块对符合赋值规则的数据进行安全赋值,通过数据包装模块对不符合赋值规则的数据进行数据包装,通过存储模块对安全赋值后的数据进行存储;该技术方案通过重写模块、替换模块、过滤模块、赋值模块的相互作用,使得开发者能够无感知的调用nsdictionary的原生系统赋值函数并达到安全赋值存储的效果,并保证数据的安全性,防止应用crash,提升用户体验。
附图说明
35.图1为根据本发明实施例的方法流程示意图。
具体实施方式
36.以下将结合附图对本发明各实施例的技术方案进行清楚、完整的描述,显然,所描述发实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
37.一方面,本发明提供一种基于ios nsdictionary安全存储数据防止crash的方法,通过重写覆盖系统load函数、添加脏数据处理函数、替换掉nsdictionary的原生赋值函数的函数指针的方式,使得开发者在完全不知道背后处理逻辑的情况下,能够无感知的调用nsdictionary的原生系统赋值函数并达到安全赋值存储的效果,且保证了数据的安全性,避免nsdictionary在处理脏数据时导致的应用空白、崩溃、闪退等问题。
38.所述方法具体步骤包括:
39.步骤1,添加nsdictionary分类文件。在项目工程中为nsdictionary创建分类文件,添加分类文件的最大好处是可以最大程度的可以解决项目里面的耦合问题,并且不会对原有工程造成任何影响。
40.步骤2,在nsdictionary分类文件中添加load()函数。load()函数本身为系统函数,在系统运行的时候会自动调用该函数,在此步骤中我们对该函数进行重写覆盖系统原生函数。
41.步骤3,在nsdictionary分类文件中添加添加hs_filtalldirtydatavalue:forkey:函数,对需要赋值的数据进行安全判断,脏数据过滤。在函数hs_filtalldirtydatavalue:forkey:中,首先对key参数进行验证,key必须为字符串nsstring类型,对key为非字符串类型的直接报错返回不予赋值,然后针对value参数进行验证,根据nsdictionary数据类型特性,其键值对中的value值必须为对象类型,如果hs_filtalldirtydatavalue:forkey:函数传递过来的value参数如果为基础数据类型,需要通过nsnumber的相关函数numberwithfloat:或numberwithint:进行一次包装后才能进行安
全赋值,如果参数value为空值如nil、null、null等则直接返回报错不予赋值。
42.步骤4,在nsdictionary分类中添加核心函数hs_setvalue:forkey:。该函数为本发明中的核心函数。该函数的核心点并不在于该函数本身,而是在创建该函数之前做的一系列铺垫工作在该函数中得到了体现,具体包括在在步骤2中覆盖系统函数load()、在步骤3中添加脏数据处理函数hs_filtalldirtydatavalue:forkey:、在步骤5中通过class_replacemethod()函数替换掉nsdictionary的原生赋值函数setvalue:forkey:的函数指针。通过这3个步骤构成了hs_setvalue:forkey:函数的核心,开发者完全不需要知道这背后的处理逻辑,可以无感知的调用nsdictionary的原生系统赋值函数setvalue:forkey:并达到安全赋值存储的效果,而这也是本发明的核心。hs_setvalue:forkey:函数的具体实现逻辑步骤包括如下步骤:首先通过重写并覆盖系统函数load()并在load()函数中通过class_replacemethod()函数将nsdictionary的原生函数setvalue:forkey:和hs_setvalue:forkey:进行相互替换。其次在安全赋值存储之前通过步骤3中的hs_filtalldirtydatavalue:forkey:函数对原生函数setvalue:forkey:传递过来的参数进行过滤、剔除、包装等操作。最后由于hs_setvalue:forkey:函数本身已经被替换成系统原生函数setvalue:forkey:,可直接调用hs_setvalue:forkey:函数本身即可达到调用原生系统函数setvalue:forkey:的赋值效果,并且保证了数据的安全性。
43.步骤5,在nsdictionary分类文件中,在load()函数加载时通过ios系统函数class_replacemethod()将nsdictionary中原生函数setvalue:forkey:的imp函数指针替换为hs_setvalue:forkey:的imp函数指针,通过此步骤已经完成了对系统原生函数的替换,开发者在调用系统原生函数setvalue:forkey:时,我们已经通过该步骤的操作将其函数调用无感知的替换到我们自己的函数hs_setvalue:forkey:中。
44.步骤6,安全赋值,完成存储。经过步骤4的数据的处理,任何不符合nsdictionary数据结构赋值规则的脏数据都已经被过滤掉。由于在步骤5中已经将nsdictionary的系统原生函数setvalue:forkey:替换为hs_setvalue:forkey:函数,这时在需要安全赋值的时候需要调用nsdictionary分类中的hs_setvalue:forkey:的函数进行安全赋值,完成存储。
45.步骤7,开发者无感知调用。当ios移动应用开发者调用nsdictionary的原生函数setvalue:forkey:时,该函数已经通过系统函数class_replacemethod替换为nsdictionary分类中的函数hs_setvalue:forkey:,脏数据过滤逻辑已经在nsdictionary分类中的函数hs_setvalue:forkey:进行处理,可保证安全赋值,开发者可以无感知的调用原生系统函数,也不需要对原有工程代码进行修改。
46.另一方面,本发明提供一种基于ios nsdictionary安全存储数据防止crash的装置,采用所述的方法实现,所述装置包括:分类文件创建模块,用于创建nsdictionary分类文件;重写模块,用于重写并覆盖系统load函数;替换模块,用于替换系统原生的赋值函数;过滤模块,用于对需要赋值的数据进行安全判断,过滤脏数据;赋值模块,用于对符合赋值规则的数据,调用替换后的赋值函数进行安全赋值;数据包装模块,用于对不符合赋值规则的数据,进行数据包装后再进行安全赋值;存储模块,用于对安全赋值后的数据进行存储。
47.所述替换模块进一步包括:在重写后的系统load函数中通过class_replacemethod()函数将nsdictionary的原生函数setvalue:forkey:替换为hs_setvalue:forkey:函数。
48.所述过滤模块进一步包括:对key参数进行验证,若key为非字符串类型,则报错返回;若key为字符串nsstring类型,则进行下一步;对value参数进行验证,若hs_filtalldirtydatavalue:forkey:函数传递过来的value参数为基础数据类型,则进行数据包装后再进行安全赋值;若value参数为对象类型,则直接进行安全赋值;若value参数为空值,则报错返回,不予赋值。
49.所述数据包装模块进一步包括:通过nsnumber的相关函数numberwithfloat:或numberwithint:进行数据包装。
50.所述装置通过分类文件创建模块创建nsdictionary分类文件,通过添加分类文件,可以最大程度的解决项目里面的耦合问题,且不会对原有工程造成任何影响;通过重写模块重写覆盖系统load函数,通过替换模块替换系统原生赋值函数,通过过滤模块过滤脏数据,通过赋值模块对符合赋值规则的数据进行安全赋值,通过数据包装模块对不符合赋值规则的数据进行数据包装,通过存储模块对安全赋值后的数据进行存储;该技术方案通过重写模块、替换模块、过滤模块、赋值模块的相互作用,使得开发者能够无感知的调用nsdictionary的原生系统赋值函数并达到安全赋值存储的效果,并保证数据的安全性,防止应用crash,提升用户体验。
51.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1