Xcode相关概念:后端
概念:project设计模式
指一个项目,该项目会负责管理软件产品的所有源代码文件、所有资源文件、相关配置,一个Project能够包含多个Target。安全
概念:target网络
一个target指的是根据project中的其它内容生成的最终产品,它是线程能够直接读懂的代码。数据结构
概念:schemeapp
scheme是对过程的定义,它定义了一个target被生成的一系列过程。可在Scheme中定义的Target的构建过程有:Build/Run/Test/Profile/Analyze/Archive框架
概念:workspace函数
简单来讲,Workspace和project是目录结构的两层,workspace是project的容器,不过须要注意工程目录结构和文件在操做系统中的目录结构没有关系。在该容器中能够存放多个你建立的Xcode Project, 以及其余的项目中须要使用到的文件。工具
有了workspace,咱们能够更方便地实现代码的重用,Xcode负责处理不一样project之间的依赖关系。单元测试
概念:build setting
配置产品的Build设置,比方说,使用哪一个Architectures?使用哪一个版本的SDK?。在Xcode Project中,有Project级别的Build Setting,也有Target级别的Build Setting。Build一个产品时必定是针对某个Target的,所以,XCode中老是优先选择Target的Build Setting,若是Target没有配置,则会使用Project的Build Setting。
概念:build phases
这个固然就是编译过程中的各个阶段了,检查依赖 -》预处理并编译源文件 -》 连接二进制库文件组成可执行文件 -》 copy资源文件组成bundle
界面:
全部的可视化元素都承载于一个窗口中,窗口左侧的元素是navigator,至关因而整个project的索引;中间是editor,同时也具备导航功能;右侧是utilities元素,包含各类inspector,帮助信息等等。而标题栏则是控制器,控制编译哪个项目,控制视图显示等。
workspace目录结构:
proj-folder:
----src:
interface:
每一个界面里的views&handlers
utility:
可复用的父类&实用工具类
service:
长期存在于内存中提供服务的类
model:
当前应用所须要的entities&managers
Supporting Files:
main.m
common.h
AppDelegate.m
plist&pch
----rc:
images.xcassets
conf:
image:
----test:
单元测试类
----Frameworks:
当前应用依赖的框架
----Products:
可执行文件
proj-folder-2:
... ... ...
ps1:以上知识工程逻辑目录结构,要保持逻辑目录和文件目录一致,使用synx工具。
ps2:不仅是iOS客户端,对于Python后端,main.py,common.py,基本上也是任何工程都有的文件,目录结构也类似。
ps3:对于复杂的第三方项目,最好创建workspace放在其它依赖项目中,能够借助cocoapods。
设计模式
一、MVC-S
数据模型和需求对应,不要常常改变;视图只依赖于模型,也尽可能不要常常改变,方便复用(视图须要依赖于模型,是由于有时确实更应该减轻控制器的负担,好比视图也能够发送网络请求加载和存储数据,一个Cell能够知道数据模型的结构,不然什么都经过控制器来完成,代码就太过冗长);控制器同时依赖于视图和数据模型,可能会常常更改。
对于比较那些视图和模型有足够直接的关系的逻辑,彻底能够直接经过视图对模型的依赖更方便的完成,必须非要经过第三方。不然控制器的功能可能过度繁杂。固然视图只须要知道模型的数据结构就能够了,不能够操做数据对象。若是须要传数据对象给视图,应该声明为weak,而且确保不要修改它,若是须要涉及到对数据的操做固然须要依靠控制器。
总之就是,视图负责显示逻辑,控制器负责控制逻辑
二、Service层
对于一些须要长期管理和维护的操做,好比音频播放,大型文件的下载等都须要长期管理,能够把这些代码封装来成为Service类。所谓服务,就是那些长期存在于内存中提供服务,管理长期任务的对象。对于Cocoa Touch,能够把service对象放置在app delegate对象中;对于Tornado,能够把service对象放置在common.py中。
须要注意的地方是,不管是数据模型的Manager类仍是Service类的实例,都应该用线程安全方法经过单例模式来建立,而且应该经过懒加载的方式来建立,就如同NSManagedObjectContext类的实例同样。单例通常被维护在一些支持文件中。
这样的设计模式,我把它成为MVC-S。以下图,注意到view对model只有关联依赖,去不能拥有。
代码风格
用空行对一个很长的函数进行分段
在每一个分段的最前面声明本段内全部新添加的变量,变量名尽量所有小写