真正实用的iOS 工程框架, 可直接用在新项目
来源:互联网 发布:js删除指定class 编辑:程序博客网 时间:2024/06/06 01:42
作者: Thebloodelves
地址: http://www.jianshu.com/p/fe8d765bc6dc
16届毕业生跟上司(五年iOS经验), 在持续半年的项目中总结的一点项目架构感悟, 虽文章用简单的语言阐述了自己对项目架构的理解, 但这种接地气的真实, 不正是我们需要的吗?
欢迎大家在下方留言回复您对文章的看法哦!!!
写作原因因为第一份工作有幸和5年iOS经验上司一起从头开始写项目(项目持续了半年),所以对于项目架构有点感悟,在这里献给大家(90%还原上司项目基础架构),先给一个码云地址(github不知道抽什么风,提交不上去)
https://git.oschina.net/liyongshi.com/BaseiOSProject.git
你们下载下来后可以直接以此开始写你们的项目(已经拿来写过三个公司项目了:快活、快照和帮帮管理助手),所以肯定是没问题的,常用的第三方、分类、工具、网络封装(基于AFN)和本地缓存(realm)等常用的都已经做好了(UtilKits.h中可查看);并且我已经把业务的前两层做好了(就是登陆、欢迎界面、首页转换逻辑,只供参考你们可以修改为你们的,第三步的需要自己跟着写下代码),你们可以按照这个思路来搭建页面和业务;这个系列总体分为两部分:介绍和使用;当然了,每个人都有每个人的搭建思路,互相借鉴嘛!
1先瞄一下目录结构
目录结构
UtilKits目录:顾名思义,这个目录用来存放分类、非pod导入的第三方库和设备信息等“辅助”元素,比如你还可以建立一个文件夹ProductInfo表示工程信息等等,然后全局文件(分类、AFN等)在UtilKits.h中导入;
AppDelegate目录:里面就是放了AppDelegate.h和AppDelegate.m文件,另起文件夹保留目录层级;
AppCustoms目录:自己写的轮子放到这里,比如图片多选等
ModelManager目录:存放模型、请求和模型管理,如上图中的Models中放模型,IdentityHttp是登录相关的请求(因为不用带入用户信息),IdentityManager操作缓存登录数据(读取、保存)和登录相关行为(退出);其实看UserManager更一目了然,但是太长了截图截不完,你们可以看看UserManager
InterfaceService目录:网路请求封装和地址宏
MainViewController目录:这里就是你的界面了,按照权限来存放,比如MainViewController管理登录(LoginController)、欢迎界面(WelcomeController)和登录后的界面(BusinessController),那么这三个文件夹就作为MainViewController目录的子目录,采用addChildViewController进行管理
好了,目录结构介绍完了,你们可以各取所需;比如你想要个定位管理器,那么你在和ModelManager同层目录建一个LocationManager即可,然后你有其他的分类分别放入对应的文件夹即可;当然了还有很多比如第三方登录那些,你自己在相应位置加上就可以了(因为不一定所有项目都有三方登录,但是所有工程都有这个基础工程中的内容,这里给的的不就是一个基础工程吗)
2部分值得说的思想
3用此基础工程做个小demo实现界面显示实时刷新
其实大部分我们都写过,这里我只讲一下RBQFetchedResultsController怎么使用,RBQFetchedResultsController能解决什么问题?
1:界面实时刷新,我们模型改变了通常是发一个通知然后要实时的界面接收通知,那么你有想过一个界面有很多模型的恐怖吗,而且前面也说了这种数据变化监听应该由数据库特性发出,
2:和第一个有点异曲同工,也就是请求和显示分离,请求就是请求,不要去管显示,这样做有好处,也就是你可以在应用任何地方请求网络,其他所有地方都自动会刷新;好了下面我们来写个简单的demo,我们在AppDelegate.m中填充假数据:
填充假数据
然后我们在BusinessController文件夹中创建一控制器FirstController(带xib,为了方便),在中间展示当前用户的名字,下面放一个输入框,输入框下边一个按钮点击后修改用户名字为输入框的内容,然后创建一个RBQFetchedResultsController代理设置成自己以便获取最新的用户信息,导航右边按钮不断创建自身并push以测试效果,界面和代码如下:
demo界面
FirstController.m上面代码
FirstController.m下面代码
上面的RBQFetchedResultsControllerDelegate基本还原CoreData的FetchedResultsControllerDelegate(数据库操作会触发这些回调,很强势),然后我们BusinessController(登录后的界面)中创建一个导航视图,rootviewcontroller设置成FirstController,代码就像这样:
BusinessController.m代码
然后我们启动模拟器,多点下右上角的“+”号创建几个FirstController实例,然后我们输入内容点击按钮,你再退回来看看是不是所有界面都变了?效果如下:
效果图
这部分的代码工程里面没有,你们跟着写一下实践一下;好了,你现在可以拿着这个基础工程开始你自己的项目了,对了realm有几个坑,我在
https://github.com/TheBloodElf/iOSDevNotices/issues
中记录了一些,如果你遇到了你可以先去看看;最后,希望这个基础工程可以为你减少项目开发的时间
- 真正实用的iOS 工程框架, 可直接用在新项目
- 分享一个android真正实用的游戏框架
- cocos2d-lua整合到ios工程,即在ios原生应用中可以直接玩cocoslua开发的游戏
- 实用的图片轮播js代码可直接引用不需要设置css样式
- 关于iOS工程文件夹的布局框架.
- 一个可直接用的赫夫曼源代码
- 可直接用的三方Dialog
- 三种在工程中比较实用的Hash
- 清理iOS工程里无用的图片,可瘦身ipa
- iOS 开发新项目必要的准备
- 通过域名直接访问部署在tomcat下的工程
- php生成数据字典小脚本,在thinkphp框架中可直接执行
- 在github建立一个可调适的工程
- Core-Plot 在新项目的使用说明
- 真正解决透明图片,png图片在ie6一下无法透明的实用方法
- iOS实用第三方框架
- WattUp:真正的无线充电技术,可在4.6米内充电
- 【小松教你手游开发】【unity实用技能】拓展函数(给系统代码添加可直接使用的接口)
- select 1和select count(*)区别
- ES的查询模式以及使用场景:
- IOS 进阶之 WKWebView
- SpringBoot 中文版
- linux多用户需要注意的地方-应用程序报错:
- 真正实用的iOS 工程框架, 可直接用在新项目
- 网络资源关闭的总结:
- mybatis中接口参数使用map类型的好处
- 如何使两台机器不通过密码连接起来(linux)
- zookeeker客户端链接zk服务器三个时间
- matlab转载
- TCP和Http的区别!(转)
- ffmpeg——avformat_alloc_output_context2
- 无论页面内容多长,footer始终在页面底部