首页> 中国专利> 一种基于Object-C的iOS项目架构方法

一种基于Object-C的iOS项目架构方法

摘要

本发明提供了一种基于Object‑C的iOS项目架构方法,涉及移动端iOS平台技术领域,该方法包括以下的步骤:S1、对基类进行封装,统一处理相同和/或相似的业务逻辑,提供给各子类继承使用;S2、对数据进行模型转换处理,生成模型,并通过点语法直接使用模型;S3、前往封装网络请求功能模块;S4、使用封装的模型转换工具以及对应的数据转模型方法,对网络请求返回的数据进行解析;S5、对APP在不同机型的展示进行屏幕适配,实现了项目的快速创建、快速进行迭代,不需要重构项目,能快速实现满足日常开发需求的项目搭建,提高工作效率。

著录项

  • 公开/公告号CN114816428A

    专利类型发明专利

  • 公开/公告日2022-07-29

    原文格式PDF

  • 申请/专利权人 银盛支付服务股份有限公司;

    申请/专利号CN202210531297.9

  • 发明设计人 潘信璋;

    申请日2022-05-16

  • 分类号G06F8/41;G06F8/38;

  • 代理机构深圳市深可信专利代理有限公司;

  • 代理人彭光荣

  • 地址 518000 广东省深圳市龙华区民治街道新区大道997号远景家园五楼501

  • 入库时间 2023-06-19 16:09:34

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-29

    公开

    发明专利申请公布

说明书

技术领域

本发明涉及移动端iOS平台技术领域,具体的,本发明涉及一种基于Object-C的iOS项目架构方法。

背景技术

随着移动互联网的高速发展,在现实应用中往往需要快速完成不同的iOS项目,而这样做出来的项目往往会基础架构不好,后续会面临一系列的问题,导致后期不停的反复修改,例如在后续的迭代中发现现有的架构不满足需要,要进行重构;项目没有做好对网络的封装;现有的数据解析和模型处理方案,需要频繁的根据业务场景、接口情况去做对应的数据解析和映射和模型转换处理等,代码繁杂;屏幕适配团队协作可维护性低,因此,需要一种新的iOS项目架构方案,来解决上述问题。

发明内容

为了克服现有技术的不足,本发明提供了一种基于Object-C的iOS项目架构方法,以解决上述的技术问题。

本发明解决其技术问题所采用的技术方法是:一种基于Object-C的iOS项目架构方法,其改进之处在于:包括以下的步骤:S1、对基类进行封装,统一处理相同和/或相似的业务逻辑,提供给各子类继承使用;S2、对数据进行模型转换处理,生成模型,并通过点语法直接使用模型;S3、前往封装网络请求功能模块;S4、使用封装的模型转换工具以及对应的数据转模型方法,对网络请求返回的数据进行解析;S5、对APP在不同机型的展示进行屏幕适配。

在上述方法中,所述步骤S1,包括以下的步骤:

通过xcode开发工具创建iOS应用的项目工程,以及配置该项目工程,使用开发语言Object-C编写所有功能代码,通过xcode编译、构建以及发布APP到应用市场;

封装视图控制器基类,该基类继承于视图控制器基础类UIViewController,在该视图控制器基础类上对常用方法与属性进行统一提供和统一维护;

封装栈视图控制器基类,该基类继承于栈视图控制器基础类UINavigationController,在该栈视图控制器基础类上对APP常用的页面转场功能的逻辑处理进行统一处理和封装;

封装表视图控制器基类,该基类继承于表视图控制器基础类UITableViewController,对APP内常见列表页的基本逻辑处理进行统一处理;

在根类NSObject的基础上封装模型model类的基类,统一过滤后端返回空数据;

封装视图类的基类,该基类继承于视图基类UIView。

在上述方法中,所述步骤S2,包括以下的步骤:

S21、接收JSON,获取类中所有成员变量,然后遍历取出每一个成员变量,获取变量名,即为字典中的键key,从字典中取出值value,然后进行赋值;

S22、当值value是字典类型时,取出成员变量的属性类型,根据反射机制,生成类对象,然后对这个类对象进行字典赋值,遵循一级转换,从第一个成员属性开始到结束,根据成员属性名去字典中查找对应的value,给模型的属性赋值,当值value是数组类型时,对应类实现字典数组转模型的协议,从字典数组中获取字典对应的模型,遍历字典数组,根据二级转换,判断字典中是否存在字典,若存在,则转为模型,最终生成模型数组,使JSON转换成模型对象;

S23、通过点语法存取模型。

在上述方法中,所述步骤S2中,对数据进行模型转换处理,通过数据模型转换库MJExtension完成。

在上述方法中,所述步骤S3,包括以下的步骤:

S31、创建网络请求管理类,并创建单例;

S32、创建网络请求会话管理类AFHTTPSessionManager对象并初始化通用配置,该通用配置包括请求超时时间、证书校验、反应序列化和响应序列化;

S33、基于网络请求库AFNetworking封装网络请求基类方法;

S34、封装常用网络请求基类方法,该网络请求基类方法包括POST和GET;

S35、对请求的请求头和基本参数入参,进行统一处理;

S36、对后端返回的数据进行序列化以及归类处理,包括数据加解密、正常返回数据的模型转换、异常拦截、toast展示和登录过期校验;

S37、提取和网络请求相关的业务代码,放到一个文件里进行统一管理;

S38、将网络相关的配置放到同一个文件管理,接口和常用常量关键字const来声明常量。

在上述方法中,所述步骤S5,包括以下的步骤:

S51、基于设计稿的设计原型和约定设计的机型,通过编写屏幕和设计稿的比例方法,使APP可以在不同手机屏幕上进行屏幕比例转换、不同机型导航栏高度适配、新老机型的安全区域适配以及字体转换,并使目标控件完成适配;

S52、用绝对布局的方式对控件的位置和大小进行布局;

S53、通过使用约束工具库Masonry来通过约束的方式对控件进行布局,完成不同机型下的转换。

在上述方法中,还包括步骤S6:对APP的异常进行捕获并处理。

在上述方法中,所述步骤S6中,对APP的异常进行捕获并处理,通过崩溃阻断库AvoidCrash完成。

本发明的有益效果是:通过对视图控制器UIViewController、栈视图控制器UINavigationController、表视图控制器UITableViewController、根类NSObject、视图类UIView基类以及基类方法的封装,用于后续迭代的快速开发使用,实现了项目的快速创建、快速进行迭代,不需要重构项目,能快速实现满足日常开发需求的项目搭建,提高工作效率;并且对JSON数据快速的进行数据解析和模型处理,防止读值错误、空指针、以及频繁的去写解析代码引发的读取值错误;专门的网络处理、优化,避免需要频繁去维护网络模块以及性能的过度消耗;适配到不同型号的手机,还原设计效果,最优展示;还可以通过运行时的方式捕获异常,自动处理空指针,避免异常闪退。

附图说明

附图1为本发明的一种基于Object-C的iOS项目架构方法的流程图。

具体实施方式

下面结合附图和实施例对本发明进一步说明。

以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整地描述,以充分地理解本发明的目的、特征和效果。显然,所描述的实施例只是本发明的一部分实施例,而不是全部实施例,基于本发明的实施例,本领域的技术人员在不付出创造性劳动的前提下所获得的其他实施例,均属于本发明保护的范围。另外,专利中涉及到的所有联接/连接关系,并非单指构件直接相接,而是指可根据具体实施情况,通过添加或减少联接辅件,来组成更优的联接结构。本发明创造中的各个技术特征,在不互相矛盾冲突的前提下可以交互组合。

随着移动互联网的高速发展,在现实应用中往往需要快速完成不同的项目,而这样做出来的项目往往会基础架构不好,后续会面临一系列的问题,导致后期不停的反复修改,一般普遍存在着如下问题:1、项目开发,都是需求来了做需求,没有做好项目架构设置,导致后期不停的反复修改;2、网络是APP里面的一个重要模块,项目没有做好封装,以及性能相关方面的优化,统一的维护方法;3、数据解析和模型处理方案,需要频繁的根据业务场景、接口情况去做对应的数据解析和映射和模型转换处理等,代码繁杂;4、屏幕适配方案不佳,例如基于苹果自带的Autolayout、StoryBoard做屏幕适配团队协作可维护性低,同时累积的文件多了还会拖慢工程的启动速度;基于NSLayouyConstraint去写约束,代码繁杂,不利于快速开发,甚至没做适配;5、项目多数未对空指针等异常进行处理,容易造成闪退,影响用户体验。

参照图1,本发明提供了一种基于Object-C的iOS项目架构方法,可以解决上述的问题,包括以下的步骤:

S1、对基类进行封装,统一处理相同和/或相似的业务逻辑,提供给各子类继承使用,同时考虑了复用性;

具体的,步骤S1包括以下的步骤:

通过xcode开发工具创建iOS应用的项目工程,以及配置该项目的开发者账号、系统版本支持等,使用开发语言Object-C编写所有功能代码,通过xcode编译、构建以及发布APP到应用市场;

封装视图控制器基类,该基类继承于视图控制器基础类UIViewController,在该视图控制器基础类上对常用方法与属性进行统一提供和统一维护,用于工程中使用到的视图控制器UIViewController的父类,简便的对方法和属性进行使用;

封装栈视图控制器基类,该基类继承于栈视图控制器基础类UINavigationController,在该栈视图控制器基础类上对APP常用的页面转场功能的逻辑处理进行统一处理和封装,用于工程中使用到的视图控制器UIViewController的父类,减少每次新建页面时的繁杂处理转场效果和控件处理;

封装表视图控制器基类,该基类继承于表视图控制器基础类UITableViewController,对APP内常见列表页的基本逻辑处理进行统一处理,封装基本逻辑处理包括处理列表页的下拉刷新、上拉加载、分页效果、缺省效果展示等业务,用于工程中使用到的表视图控制器UITableViewController的父类,方便快速使用上述功能;

在根类NSObject的基础上封装模型model类的基类,可以统一过滤后端返回空数据,数据结构类型异常过滤的解析;

封装视图类的基类,该基类继承于视图基类UIView,用于封装视图常用到的方法如一行代码写阴影、画圆角、增加分割线等,用于工程中使用到视图类的控件的父类,方便快速使用上述方法和功能。

至此,完成开发工作使用到的多数控件类型的基类和基础方法的封装,用于后续迭代进行统一方法调用、拦截、和统一业务处理。

S2、对数据进行模型转换处理,生成模型,并通过点语法直接使用模型;进一步的,可通过数据模型转换库MJExtension对数据进行模型转换处理,MJExtension可将复杂的数据如字典、数组、数组嵌套字典、字典嵌套数组、对象里包含对象等复杂数据快速方便的转换为模型对象,快速进行转换,减少解析封装工作。

具体的,步骤S2包括以下的步骤:

S21、接收一个JSON,获取类中所有成员变量,然后遍历取出每一个成员变量,获取变量名,即为字典中的键key,从字典中取出值value,然后进行赋值;

S22、当值value是字典类型时,取出成员变量的属性类型,根据反射机制,生成类对象,然后对这个类对象进行字典赋值,遵循一级转换,从第一个成员属性开始到结束,根据成员属性名去字典中查找对应的value,给模型的属性赋值,当值value是数组类型时,对应类实现字典数组转模型的协议,从字典数组中获取字典对应的模型,遍历字典数组,根据二级转换,判断字典中是否存在字典,若存在,则转为模型,最终生成模型数组,使JSON转换成模型对象;

S23、通过属性的方式,通过点语法来存取模型,避免通过键值对key-value方式操作,编译器不能识别出字符串的错误。

依据所述的MJExtension,优选的通过字典转模型方法+(instancetype)mj_objectWithKeyValues:(id)keyValues完成字典转模型的转换。依据所述的MJExtension,优选的通过字典数组转模型数组方法+(NSMutableArray*)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray来将字典数组转换成模型数组来使用,依据所述的MJExtension,优选的通过对字典的值进行过滤和进一步转化方法-(id)mj_newValueFromOldValue:(id)oldValueproperty:(MJProperty*)property,该方法进行空值的判断和替换处理。

数据模型转换处理后,用于替换传统key-value方式存取值的使用方式,提升可读性,经过转换后的模型,可以通过点语法直接使用,而不是传统的key取值,避免了编译不能发现错误的隐患,更安全。

S3、前往封装网络请求功能模块;

具体的,步骤S3包括以下的步骤:

S31、创建网络请求管理类,并创建单例,防止每次请求都要重新创建造成不必要的资源开支浪费;

S32、创建网络请求会话管理类AFHTTPSessionManager对象并初始化通用配置,该通用配置包括请求超时时间、证书校验、反应序列化和响应序列化;

S33、基于网络请求库AFNetworking封装网络请求基类方法;

S34、在上述基类方法的基础上封装常用网络请求基类方法,该网络请求基类方法包括网络请求改方法POST和网络请求查方法GET,用于实际的业务需要;

S35、对请求的请求头和基本参数入参,进行统一处理;

S36、对后端返回的数据进行序列化以及归类处理,包括数据加解密、正常返回数据的模型转换、异常拦截、友好提示toast展示和登录过期校验;

S37、提取和网络请求相关的业务代码,放到一个文件里进行统一管理,可以有效的进行网络请求相关的迭代维护,;

S38、将网络相关的配置放到同一个文件管理,对接口和常用常量关键字const来声明常量,可提升性能。

网络请求作为一个APP必不可少的模块,对性能以及可维护性、快速迭代性要求非常高,对该功能进行封装,提升性能以及后期的迭代效率。

S4、使用上述封装的模型转换工具以及对应的数据转模型方法,对网络请求返回的数据进行解析;

S5、对APP在不同机型的展示进行屏幕适配,以达到再在不同的机型下均有最优的展示效果;

具体的,步骤S5包括以下的步骤:

S51、基于设计稿的设计原型和约定设计的机型,通过编写屏幕和设计稿的比例方法,使APP可以在不同手机屏幕上进行屏幕比例转换、不同机型导航栏高度适配、新老机型的安全区域适配以及字体转换,并使目标控件完成适配;

S52、使用绝对布局的方式对控件的位置和大小进行布局,避免使用故事板StoryBoard,从而提升xcode的启动速度以及团队协作效率,防止多个人操作故事板代码冲突;

S53、通过使用约束工具库Masonry来通过约束的方式对控件进行布局,简单方便的通过约束完成控件在屏幕上对应位置以及父视图位置的约束布局,不用写繁杂的约束条件NSLayouyConstraint代码,直观的对控制基于父视图、周围的控件进行布局,且代码清晰明了,再配合上述的适配方法,完成不同机型下的转换,可以达到在各个机型上都能显示到很好的效果。

通过对视图控制UIViewController、栈视图控制器UINavigationController、表视图控制器UITableViewController、根类NSObject、视图类UIView基类以及基类方法的封装,用于后续迭代的快速开发使用,实现了项目的快速创建、快速进行迭代,不需要重构项目;并且快速的进行数据解析和模型处理,防止读值错误、空指针、以及频繁的去写解析代码引发的读取值错误;专门的网络处理、优化,避免需要频繁去维护网络模块以及性能的过度消耗;还实现了适配到不同型号的手机,还原设计效果,最优展示。

进一步的,本发明还包括对APP的异常进行捕获并处理,有效的阻止APP的经常性Crash,有效提升用户体验。在Object-C的开发语言里,通过分类category+runtime+异常的捕获来防止Foundation一些常用方法使用不当而导致的崩溃。利用category、runtime来交换两个方法,并且在方法中捕获异常进行消息转发以及异常处理,从而对APP的异常进行捕获并处理防止异常发生,有效的阻止APP的常见Crash,有效提升用户体验。具体的,通过如下方式实现;

1、发送消息,对象调用方法,覆盖重写发送消息实例方法+resolveInstanceMethod:方法进行判断,如果返回YES,则消息正常处理,程序正常,返回NO表示不能接受和处理消息,此时需要进行消息转发;

2、消息转发,当第一步返回NO时,覆盖重写消息转发中心的选择器转发目标方法-forwardingTargetForSelector:,在这个方法中,可以把这个消息转发给其他对象,并返回返回值,上述方法返回备用接收者,则消息正常处理,程序正常,返回nil,继续进行下一步;

3、返回空值nil,则覆盖重写消息转发中的签名选择器方法-methodSignatureForSelector:来获取一个给定选择器标识的方法的描述,此时若返回的包含由标识的方法的描述的对象,则此时消息正常转发,程序正常。当-methodSignatureForSelector:返回空值nil,Runtime则会发出一个无法处理的消息方法-doesNotRecognizeSelector:同时程序这时也就挂掉了;

4、当签名选择器方法返回的选择器标识符方法描述值为空值nil时,重写此方法返回函数签名,这样运行时Runtime就会通过消息调用类NSInvocation创建一个消息调用对象并通过转发方法-forwardInvocation:通过创建一个表示消息的对象并向接收者发送包含该对象作为参数的消息来委托消息,避免程序挂掉。

进一步的,可以通过崩溃阻断库AvoidCrash去解决APP常见问题导致的崩溃crash的问题,快速实现异常的捕获来防止程序的崩溃。通过生效方法[AvoidCrashmakeAllEffective]让AvoidCrash生效;声明需要处理的类型数组NSArray*noneSelClassStrings=@[@"NSNull",@"NSNumber",@"NSString",@"NSDictionary",@"NSArray"];通过崩溃阻断库的设置拦截崩溃类型数组[AvoidCrashsetupNoneSelClassStringsArr:noneSelClassStrings]来让AvoidCrash对该数组内的类型生效起来,把AvoidCrash在管理整个应用程序生命周期的入口文件AppDelegate上使用起来之后,就可以捕获以上需要处理的类的异常。

本发明实现了移动端iOS平台下开发APP时快速搭建项目、快速迭代、减少异常的效果,通过该项目架构设计方法,可以大大减少前期项目框架搭建,以及后期迭代扩展项目的重构,减少大部分异常的crash,不同机型展示适配,提升用户体验,大大提高工作效率,以及用户体验度。

本发明通过对视图控制器UIViewController、栈视图控制器UINavigationController、表视图控制器UITableViewController、根类NSObject、视图类UIView基类以及基类方法的封装,用于后续迭代的快速开发使用,实现了项目的快速创建、快速进行迭代,不需要重构项目,能快速实现满足日常开发需求的项目搭建,提高工作效率;并且对JSON数据快速的进行数据解析和模型处理,防止读值错误、空指针、以及频繁的去写解析代码引发的读取值错误;专门的网络处理、优化,避免需要频繁去维护网络模块以及性能的过度消耗;适配到不同型号的手机,还原设计效果,最优展示;还可以通过运行时的方式捕获异常,自动处理空指针,避免异常闪退。

以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号