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的 ...
随机推荐
- Linux就这个范儿 第13章 打通任督二脉
Linux就这个范儿 第13章 打通任督二脉 0111010110……你有没有想过,数据从看得见或看不见的线缆上飞来飞去,是怎么实现的呢?数据传输业务的未来又在哪里?在前面两章中我们学习了Linux网 ...
- CentOS 6.6 yum 搭建LAMP环境
CentOS 查看操作系统版本 [root@oa ~]# cat /etc/redhat-releaseCentOS release 6.6 (Final) 参考linux centos yum安装L ...
- DAC重置max server memory
15:44 2014-01-24 08R2,一次通过GUI更改'最大服务器内存(MB)'为16MB,errorlog显示信息如下 :: . Run the RECONFIGURE statement ...
- [RGEOS]支持栅格数据读取和显示
SharpMap真的很强大,这里通过改造GdalRasterLayer类实现了在RGeos项目中支持栅格图像的读取和显示,同时支持影像的无级缩放. GdalRasterLayer通过读取FWTools ...
- css3实现动画效果
一.动画效果的常用属性 实现动画效果需要借助css3的下列属性:transform,transion,animation(具体可以参见教材) 二.动画效果实例 1)文字闪烁的动画效果 /*文字的闪烁效 ...
- 分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket
业务背景介绍 对于web应用的限流,光看标题,似乎过于抽象,难以理解,那我们还是以具体的某一个应用场景来引入这个话题吧. 在日常生活中,我们肯定收到过不少不少这样的短信,“双11约吗?,千款….”,“ ...
- docker summary
http://blog.tankywoo.com/docker/2014/05/08/docker-4-summary.html 总结的很好 ----------------------------- ...
- Java基础之处理事件——applet中语义事件的处理(Lottery 1)
控制台程序. 语义事件与程序GUI上的组件操作有关.例如,如果选择菜单项或单击按钮,就会生成语义事件. 对组件执行操作时,例如选择菜单项或单击按钮,就会生成ActionEvent事件.在选择或取消选择 ...
- PostgreSQL 同步复制(1master+2standby)
OS: Red Hat Enterprise Linux Server release 6.5 (Santiago) PostgreSQL: postgresql-9.4.5.tar.bz2 mast ...
- !! 浅谈Java学习方法和后期面试技巧
浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...