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的 ...
随机推荐
- Useful bat command
1.Start and stop the windows services net stop <service name>net start <service name>net ...
- Shell函数的简单应用
Shell函数的简单应用 在脚本内给函数传参: #!/bin/bash . /etc/init.d/functions CheckUrl (){ curl -I -s $ | head - } Che ...
- 由单例模式学到:lock锁
lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁. lock (xxx) { // Critical code section. } lock 关键字可确保当一 ...
- 构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock
构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock http://blog.chinaunix.net/uid-306663-id-2440200.html LIDS官方网站: ...
- H3C交换机配置
h3c 交换机的配置命令 通过 console 连接到交换机 交换机所使用的 console 接口看上去像是一个普通的 RJ45 网卡接口,但是并不能使用普通的网线与 PC 连接 ^_^ .它要通过 ...
- MVC项目实践,在三层架构下实现SportsStore-10,连接字符串的加密和解密
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- Eclipse/Myeclipse 开发项目技巧
Eclipse/Myeclipse 开发项目 编程的本质: 把现实生活中的业务逻辑用代码实现. eclipse 是一个开放源代码.基于Java的可扩展开发平台. (最初主要用来Java语言开发,但目前 ...
- Cache封装类
代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- iOS TPKeyboardAvoiding自动识别键盘的高度
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicatio ...
- Oracle Flashback Technologies - 闪回被drop的表
Oracle Flashback Technologies - 闪回被drop的表 在oracle10g中,drop一个表后,表没有真正被删除,支持被rename后放在recyclebin中. #新建 ...