28)关于@protocol
Xcode创建项目的时候自动生成的代码比如有这样的内容:
@interface AppDelegate : UIResponder
我疑惑了很久最后那个“<>”是个什么语法,找了半天才明白,这句话的含义大概相当于Java语法:
class AppDelegate extends UIResponder implements UIApplicationDelegate
其中UIApplicationDelegate是一个接口协议(@protocol),例如:
@protocol TestProtocol
@required
- (void)requiredMethod;
@optional
- (void)optionalMethod;
@end
protocol的继承:
@protocol Test2Delegate
@end;
翻译一下
OC(Objective-C) | Java |
---|---|
@interface | class |
: | extends |
<> | implements |
29)Objective-C的优(qi)雅(guai)语法,方法定义
- (void) doIt:(NSString *) actorName movieName: (NSString*) value timesSeen: (int)times
大致相当于Java语法:
void doIt( String actorName, String value, int times );
OC干嘛不干脆把“:”也去掉,就可以跟文言文差不多了:p
30)浅谈MVC
Xcode天然的倾向于MVC设计模式,Xcode创建项目的时候,各种模板生成的项目中都有xxxController这样的对象。通常各个View都会配一个Controller,而用“Page-Based Application”模板创建的项目,还会有个ModelController。大体上还算合理。
相对来说,Java JDK的控件在MVC的应用上是比较繁琐的,有些控件自带MVC,其实只是一个View对象而已。比如界面上放一个JTable表格,但经常还要搭配一个DefaultTableModel来操作数据,其实反而把事情复杂化了。
MVC是设计模式中比较常见的一种,不过其概念和实现都相对宽泛,主要是为了减少耦合,有利于代码理解、维护、重用等。不过实际应用中,具体情况千差万别,M、V、C各自的职责和相互间的边界并不那么容易界定。个人习惯来说,我通常将整个程序拆分为【视图】、【视图管理】、【业务管理】、【数据封装】、【数据】几大部分。
【用户】-【视图】-【视图管理】-【业务管理】-【数据封装】-【数据】
- 视图:界面(仅仅是界面),相当于Interface Builder创建的xib或StoryBoard之类的东东。
- 视图管理:管理界面的变化。界面元素的呈现方式千变万化,而且经常有些业务逻辑并不都设计数据模型都变化,其实就是需要变换各种不同的界面形式来展示信息,用户在各种信息(page)或不同层次(master-detail)或不同形式(图形/表格)之间来回跳转。因此视图管理经常有好多工作量,可以单独作为一个部分拆分出来。
- 业务管理:控制业务逻辑,通常侧重于涉及数据变化的部分。
- 数据管理:封装对数据的操作,尤其比如数据库、文件、远程通讯等等,但不处理业务逻辑。
- 数据:数据库等等。
不过,既然说简单粗暴,其实经常我也把各种东西混在一起写。代码感觉“脏”得受不了的时候,重构一下,世界又清爽一些。现代IDE开发环境对重构的支持很有帮助,比如对变量或方法的引用都可以比较容易的回溯,不用全文搜索那么麻烦,相对容易判断局部重构对程序其它部分的关联和影响。
不过多人协作的大项目还是要尽量设计阶段就谨慎一点,主要是互相有接口,重构如果会影响到别人到模块,难免会有纠纷。
31)Objective-C的变量和属性(@property)
原来属性跟变量不是一个东西(-_-|||)。
简单来说,编译器对@property自动生成getter和setter方法,可以少写几行代码。通过getter和setter方法,可以定义变量为private,但getter和setter方法(默认实现就是存取变量值)实质上导致该变量相当于public,所以个人而言其实是不喜欢这种形式的。
通过设置不同的限定词,可以控制属性的读写、原子性、深浅拷贝、引用计数方式。不过总的来说,默认实现对变量控制意义不大,需要自定义控制逻辑就还是得自己写代码。
参考:[OC:属性][] 这篇文章对属性和限定词有解释。
[OC:属性]:http://www.jianshu.com/p/786ce7c7c899
32)Xcode快捷键(windows键盘):
windows | mac |
---|---|
win | command(四叶花图标) |
alt | option(鸡翅膀图标) |
ctrl | control(^) |
shift | shift(向上箭头) |
比如在Windows常用的拷贝(ctrl+c)粘贴(ctrl+v),在Xcode快捷键(用Windows键盘的话)是拷贝(win+c)粘贴(win+v)。
33)WINDOWS与VMware MAC共享文件夹
度娘搜索出来的结果基本都是说在“虚拟机设置”-“选项”-“共享文件夹”里面设置一下就可以,但我操作多次都不成功,重装了VMTools也不行,在MAC看不到WINDOWS的文件夹。
后来终于找到这份说明 [Win7 和 MAC 系统通过VMware共享文件夹][],按步骤操作搞定。我用的VMware® Workstation 12 Pro,Version 12.1.1,虚拟机OS X 10.11。
[Win7 和 MAC 系统通过VMware共享文件夹]:http://blog.sina.com.cn/s/blog_725cab6d0100r9dv.html
34)APPLE官方Sample,以及各种文档资料
https://developer.apple.com/library/prerelease/content/navigation/
35)文章中插入代码框格式
为了让文章格式好看一点,学了下Markdown语法。
- 在个人设置中修改为采用 Markdown 编辑器
- 用三个反引号将代码包围起来,即显示为本文的代码框格式。参考 中代码框的实现
- 更多 Markdown 语法参考 Markdown 语法说明 (简体中文版) 还有 Markdown——入门指南