iOS的第一个习作
代码在这里,对git还是使用不熟练,好在github新建项目后体贴地提示是不是要执行这样两句——
这两句我肯定是背不住的,所以记一下。
git remote add origin https://github.com/qidafang/iOS_427studio.git
git push -u origin master
思而勤工作室的手机app,ios版开发比android还顺利一点,记录一下用到的知识:
1)表现层
故事板做界面+controller类,用着很舒服的组合。而且基础库自带了标签结构和导航结构。
界面拖拽式生成,controller中的两大关键元素(代表界面元素对象的实例属性、响应界面元素操作的实例方法)也拖拽生成。
简便到如此,以至于嫌controller过于简洁了,干脆让它实现界面元素的数据源接口和代理接口,为了实现相应方法,对应该元素数据的集合对象也必须是controller的实例属性了,当然这也是天经地义,controller持有model是理所当然的。
界面组件,标签按钮文本框的使用就不说了,webview分别演示了指定html和指定url两种用法。
2)rest
因为实例简单,省去业务逻辑层,直接说数据层。当然,数据层指的不是狭义的“关系型数据库”,而是广义的与所有形式数据源打交道都算,在这个项目里分成两部分:rest和dao,分别用于与服务器和本地数据库打交道。
因为rest类的异步使用方法是在回调函数里进行后续动作,而“后续动作”是对界面进行修改,比如从服务器上抓取数据来填充界面上的列表,所以rest层类需要持有controller类的对象,在回调函数中好修改controller类的属性(即代表页面数据的model属性)、调用controller对象的方法(如让表格重新加载内容的reload方法)。
从分层角度看,这种“下层类了解上层类的存在”是不合理的,更合理的应该是controller实现某个接口例如RestCaller,该接口定义一个onRestOk(data:NSObject)这样的函数,controller实现的该方法体从data中获得rest传来的数据,然后执行逻辑;rest类声明一个var caller:RestCaller实例变量,在回调函数中调用该caller.onRestOk(有用的数据);controller类使用rest类时即这样:
let rest:SomeRest = SomeRest();
rest.caller = self;
rest.doQuery(xxxx);
这是一种解耦的思路,由于时间就不实现了。至于http请求、json处理,这些基础类库的使用也不说了。
3)dao
虽然项目是用swift写的,但在dao这块还是不得不用objective-c,让我很高兴objective-c的学习还是有用。不过除此之外想想,俩语言不得不混用实在不是好事。
因为用的是基础语法,非常类似java的jdbc那一套,打开连接,准备sql,赋予参数,执行,遍历结果什么的,不用多说。用到的全局函数类似php的用法,面向对象程序员看了,优越感油然而生。
示例程序是列表的增删改查,与android类似,列表是基础库,单元格自行实现,单元格对象需要持有数据,因为在点击格里删改按钮时需要知道点的是哪一行,删除之后肯定需要让controller刷新数据,所以让单元格对象持有了controller的引用(为了省事还让它持有了dao单例)。在增改打开表单页面的时候,需要在表单controller知道自己是增还是改,而且持有要改的对象的数据,这都是最理所当然的了。
4)总结
有了上面1)2)3)这三样技术,综合使用就“运用之妙,存乎一心”了,因为是练手,没有进行形而上的设计和封装,比如提炼基础类和接口。对小项目来说,可能降级到粗浅一点的抽象级别还更舒服一些,杀牛用杀牛刀,杀鸡用杀鸡刀。
这就像当servlet和jdbc(再加上基础html,css,javascript)会用了之后,剩下的都是锦上添花的进步,之后的进步的最大收获在设计和思想上。而我个人因为有java的长期训练,倒是不需要做“在ios上花大量时间练习来进步到有思想的境界”这一工作(笑),毕竟像《企业应用架构模式》之类的书的伟大,不是仅仅限于某个语言和某个领域的,幸运的是这些书我读过(个人书单)。
这一个月左右(总时间超过一个月,但净时间不到)不算短,也不算长,毕竟是两种语言、好几本书、全新的操作系统(mac不好用!)和ide。虽然不算长,也到此为止了,因为据爱老师说混合开发是主流,那ios原生技术了解到基础,并且有能力随时学习别的基础,就足够了,以后用混合开发的时候,不至于迷惑:“哎呀我不懂ios原生开发,搞混合开发有点摸黑。”。
最后上个图~
iOS的第一个习作的更多相关文章
- Xamarin iOS编写第一个应用程序创建工程
Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后,就可以在Xamarin Studio中编写程序了.本节将主要讲解在Xamarin Studio中如何进行工程的 ...
- iOS狂暴之路---iOS的第一个应用中能学到哪些知识
一.前文回顾 在之前已经介绍了 iOS的学习路线图,因为中间遇到一些Android开发问题,所以就耽搁了一段时间,那么接下来的这段时间我们将继续开始iOS的狂暴之路学习,按照国际惯例,第一个应用当然是 ...
- 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...
- React Native ios开发第一课
前言 本篇文章的作用在于帮助你快速上手使用React Native编写iOS应用.如果你现在还不太了解React Native是什么以及Facebook为什么要创建React Native,你可以先看 ...
- ios开发第一步--虚拟机安装MAC OS X
暂时还没买Macbook,先用虚拟机练练手. 先说说准备工作,我是在win8下安装的,这个不是关键的,只要Vmware版本和MAC OS X版本确定就行了,win7下同样可以. 1.虚拟机Vmware ...
- iOS 判断第一个字符是数字还是汉字
NSString *titleStr = @"琳小兮"; //先截取字符串,拿到第一个字符 NSString *firstStr = [titleStr s ...
- IOS彩票第一天基本框架搭建
*****初始化 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionar ...
- IOS设计模式第一篇之MVC
设计模式的好处:我们可以写出容易理解,重用度很高的代码.降低代码的耦合度,符合软件工程的思想. 设计模式主要分为三类:创造型的:单例和抽象工厂.结构类型的: MVC Decorator, Adapt ...
- iOS 基础 第一天(0804)
OC对象的本质就是一个结构体 为什么说是个结构体? 例如:类里面声明了几个成员变量\实例变量(已添加@plublic),外部对象的指针在访问这个变量的时候是这么写的p->a 0804 注意oc的 ...
随机推荐
- 【转】Android中Application类用法
转自:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和A ...
- LeetCode Shortest Word Distance III
原题链接在这里:https://leetcode.com/problems/shortest-word-distance-iii/ 题目: This is a follow up of Shortes ...
- 在定位中,如何清除已经设置好的bottom
这个东西其实很简单,将bottom设auto,便可在设置top的值,那么具体的应用是什么?目前一个是用于全屏,二是用于输入框在手机端的下半屏(被输入发遮挡问题)? 例子如下 css代码: * { ma ...
- PHP回调函数的几种用法
PHP回调函数的实现方法 目录 前言 全局函数的回调 类静态函数的回调 对象的方法的回调 PHP事件模型(观察者模式)的实现思路 前言 最近在开发一个PH ...
- 教你安装CentOS 6.5如何选择安装包
近来发现越来越多的运维小伙伴们都有最小化安装CentOS 6.5系统的洁癖,因此,找老男孩来咨询,这个“洁癖”好习惯啊,必须支持,,因此发布本文和大家分享下. (1)系统安装类型选择及自定义额外包组 ...
- JSON Web Token
What is JSON Web Token? JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact a ...
- CentOS安装NodeJS v0.10.25 + Express
安装必需组件 yum -y install gcc make gcc-c++ openssl-devel wget cd ~wget http://nodejs.org/dist/v0.10.25/n ...
- centos6关闭ipv6
Install packages for CentOS 6.0 Minimal cat <<EOF>>/etc/modprobe.d/disable_ipv6.conf ali ...
- ajax异步提交文件
首先 下载jquery和jquery.form.js http://malsup.com/jquery/form/ <script type="text/javascript&qu ...
- Java NIO 开篇
一些很好的blog(待更新): 1.NIO入门 2.NIO.2 入门,第 1 部分: 异步通道 API I- 就是从硬盘到内存 O- 就是从内存到硬盘 一.阻塞IO 第一种方式:我从硬盘读取数据,然后 ...