Cocoa Touch(一)开发基础:Xcode概念、目录结构、设计模式、代码风格
Xcode相关概念:
概念:project
指一个项目,该项目会负责管理软件产品的全部源代码文件、全部资源文件、相关配置,一个Project可以包含多个Target。
概念:target
一个target指的是根据project中的其它内容生成的最终产品,它是线程可以直接读懂的代码。
概念:scheme
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。
设计模式
1、MVC-S
数据模型和需求对应,不要经常改变;视图只依赖于模型,也尽量不要经常改变,方便复用(视图需要依赖于模型,是因为有时确实更应该减轻控制器的负担,比如视图也可以发送网络请求加载和存储数据,一个Cell可以知道数据模型的结构,否则什么都通过控制器来完成,代码就太过冗长);控制器同时依赖于视图和数据模型,可能会经常更改。
对于比较那些视图和模型有足够直接的关系的逻辑,完全可以直接通过视图对模型的依赖更方便的完成,必须非要通过第三方。否则控制器的功能可能过分繁杂。当然视图只需要知道模型的数据结构就可以了,不可以操作数据对象。如果需要传数据对象给视图,应该声明为weak,并且确保不要修改它,如果需要涉及到对数据的操作当然需要依靠控制器。
总之就是,视图负责显示逻辑,控制器负责控制逻辑
2、Service层
对于一些需要长期管理和维护的操作,比如音频播放,大型文件的下载等都需要长期管理,可以把这些代码封装来成为Service类。所谓服务,就是那些长期存在于内存中提供服务,管理长期任务的对象。对于Cocoa Touch,可以把service对象放置在app delegate对象中;对于Tornado,可以把service对象放置在common.py中。
需要注意的地方是,无论是数据模型的Manager类还是Service类的实例,都应该用线程安全方法通过单例模式来创建,并且应该通过懒加载的方式来创建,就如同NSManagedObjectContext类的实例一样。单例一般被维护在一些支持文件中。
这样的设计模式,我把它成为MVC-S。如下图,注意到view对model只有关联依赖,去不能拥有。

代码风格
用空行对一个很长的函数进行分段
在每个分段的最前面声明本段内所有新添加的变量,变量名尽可能全部小写
Cocoa Touch(一)开发基础:Xcode概念、目录结构、设计模式、代码风格的更多相关文章
- 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?
go语言的开发工具推荐? go语言开发普通程序及开发web程序的时候,应该以哪种目录结构组织代码? 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码? >> golang这个答案 ...
- 【Unity3D游戏开发】之游戏目录结构之最佳实践和优化 (十一)
游戏目录结构之最佳实践 前置条件 1.多人协作开发,git管理 2.游戏不大,所有Scene合并到一起Scene中,eg.RoleScene.MapScene.StoreScene 3.Master一 ...
- TP5学习基础二:目录结构、URL路由、数据操作
一.安装1.使用git或者composer(composer update)进行实时更新,区别在于git不会清空核心框架目录而composer会清空.2.使用官网打包好的TP压缩包(解压即可用)-&g ...
- Python基础之软件目录结构规范
设计一个层次清晰的目录结构,就是为了达到这两点: 可读性高:不熟悉项目的人,一眼就能看懂目录结构. 可维护性高:随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好. 目录组织方式 ...
- 【AngularJS学习笔记】开发时候的建议目录结构,基本开发步骤
项目目录结构划分 Debug Node.JS的生成目录 Node_modules Node.Js的依赖项 Src 项目源文件 ----|framework 项目框架 --------|app --- ...
- 在IOS开发中,项目的目录结构如何搭建?
网上有很多关于IOS开发的学习资料.然而却很少有关于设计一个项目时,如何设计其目录结构?这对于自学IOS的程序猿们,无疑有诸多不利.接下来,我就简单的谈下真正在公司中,项目的目录结构如何搭建: 以上为 ...
- Android开发第一讲之目录结构和程序的执行流程
1.如何在eclipse当中,修改字体 下面的这种办法,可以更改xml的字体 窗口--首选项--常规--外观--颜色和字体--基本--文本字体--编辑Window --> Preferences ...
- Thinkphp5.0实战开发二------自动生成目录结构
序言 ThinkPHP5.0 具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用\think\Build 类库.ThinkPHP5.0中模块文件夹在application ...
- 3-微信小程序开发(小程序的目录结构说明)
https://www.cnblogs.com/yangfengwu/p/10050784.html 源码下载链接: 或者 这节先说一下小程序的目录结构 自行根据 https://www.cnblo ...
- python基础-10 程序目录结构 学生选课系统面向对象练习
一 程序目录结构 1 bin文件夹 二进制文件.代码程序 2 conf 配置文件 3 帮助文档 4 头文件库文件等 二 学生选课系统部分代码 未完待续 1 包内的__init__.py文件 在包 ...
随机推荐
- jquery获取标签内容,编辑内容
一.获取页面元素 三种方式获取页面中元素的内容. input标签使用:.val()获取 标签下的html及文本内容:.html() 仅获取标签下的纯文本内容:.text() <head> ...
- switch_to 理解
最近看linux0.11源码时,看到任务切换函数switch_to,感觉很晦涩,于是在网上查了一些资料,现在终于有些眉目,特记录于此,以方便大家参考,有什么错误或不足之处,还请大家指出~ switch ...
- zju 1037 Gridland(找规律,水题)
题目链接 多写几个案例,根据数据的奇偶性,就能找到规律了 #include<stdio.h> int main() { int t,n,m; double ans; scanf(" ...
- 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .
package com.email.jav; import java.io.File;import java.io.IOException;import java.net.URL; import jx ...
- [主席树]HDOJ4348 To the moon
题意:n个数, m个操作 1. C l r d 给[l, r]区间的每个数加上d2. Q l r: 查询[l, r]区间的和3. H l r t: 查询第t个操作时[l, r]区间的和4. B ...
- cojs 疯狂的重心 疯狂的机器人 题解报告
疯狂的重心 话说做过幻想乡战略游戏的人应该很容易切掉这道题目吧 我们考虑一棵树如果添加了一个叶子,那么其重心最多向叶子方向移动1的距离 而是否移动我们只需要记录子树中有多少个点就可以判断啦 也就是说这 ...
- 【Linux高频命令专题(12)】touch.md
概述 一般在使用make的时候可能会用到,用来修改文件时间,或者新建一个不存在的文件. 命令格式 touch [选项]... 文件... 命令参数 -a 或--time=atime或--time=ac ...
- eclipse 中忽略jsp, xml文件中的报错信息
有的时候, 在eclipse中, jsp, xml 文件时运行的好好的, 可是就是在eclipse中报错, 虽然不影响功能, 但看起来很烦, 去掉这些错误警告的方法是: Windows-Prefere ...
- EF 实体关系
基于共享主键的一对一: this.HasRequired(t => t.TRDConInfo) .WithOptional(t => t.TRDFoundationProjCheck); ...
- python网络爬虫(一):网络爬虫科普与URL含义
1. 科普 通用搜索引擎处理的对象是互联网的网页,目前网页的数量数以亿计,所以搜索引擎面临的第一个问题是如何设计出高效的下载系统,已将海量的网页下载到本地,在本地形成互联网网页的镜像.网络爬虫 ...