iOS开发学习 阶段过程简述

下面就简单介绍一下我iOS开发的感受,也是学习iOS开发的一个体系架构。

1 iOS开发环境

1.1 开发环境

标准的配置是Mac OS X + Xcode。

MacOSX的话首选用苹果电脑,macmini最便宜只要4000多就好了然后自己配一个显示器,macbookpro 也可以,不推荐使用macbookair。还有很多人使用黑苹果或者虚拟机甚至在windows上装一些工具都是不可取的。

另外官翻版的也可以去买,很便宜就可以买到好机子,官翻版

Xcode这个开发工具自己继承了iPhoneSDK,所以不用单独下载SDK。调试的模拟器可以从Xcode里面下载不同版本的模拟器。

1.2 账号 证书 上架 等

iOS调试真机是需要证书的,所以这个时候需要从申请一个iDP账号,不过仅仅需要调试的话,某宝上有很多卖20几块的证书。应用上传appstore的话有很多种方法,证书分为企业和个人,个人的可以到appstore,企业是不可以的。

2 Obejct-C语言

Object-C语言通常写作objective-c或者obj-c,是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言, 它能够和C、C++混合编程。OC是一个编译型的语言,通过gcc编译器把object-c代码编译成机器指令。关于基本概念可以参考,十分钟让你明白Objective-C的语法(和Java、C++的对比) 。

2.1动态特性

Object-C具备一些动态特性,包括动态类型、动态绑定、动态加载,也就是Object-C在运行时才能知道一些对象的类型以及所调用的方法。

2.2内存管理

OC是使用引用计数原则,现在OC引入ARC(自动引用计数原则)。引用计数有几个规则,一是谁创建谁释放,通过alloc、new和copy创建对象, 然后调用release或者autorelease去释放对象,第二是,除了alloc、new和copy之外创建的对象都是autorelease的, 第三谁retain了,谁释放。

2.3 一些语言特性

OC首先是只有单一继承,没有多重继承。

属性访问,@property加上@synthesize使用后能够自动生成setter和getter方法。

category,中文一般叫做类别,他能够为现有的类提供新的方法,他将类的实现分散到多个不同的文件或框架中,创建对私有方法的前向引用,向对象添加非正式协议。

block语法,块,他通常代表小段的自包含的代码片段,因此,他们封装为可以并行执行的工作单元额外有用,还可以用于在集合中进行遍历,或者在其他操作 完成时作为回调。块代替传统回调函数的意义有两个:一是他们允许在方法实现的调用中就近写入代码,而且块经常被作为框架中一些方法的参数;二是他们可以访 问本地变量。

OC中有很多类是以NS开头的,那是cocoa层里面Foundation框架的类库。

3 iOS开发

3.1 iOS操作系统简介

iOS的系统架构分为四个层次:核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)和可触摸层(Cocoa Touch layer)。每层都包含很多系统框架,例如著名的UIKit框架就是在cocoa touch。

3.2 常用的设计模式

最基础的是MVC模式,就是把项目分为Model、View和Controller三层进行管理。

常用的还有代理模式,通过协议和block实现。观察者模式的话体现在了KVO和notification上了。target-action模式是OC中 非常常见的对象之间方法调用的方式,一般在和UI打交道的时候处理各种GUI上的事件会利用到这种模式,他通常会有一个target作为消息的接收者。单 例模式,使得单例对象在项目中只会创建一次。工厂模式,是一个类族的概念,很符合敏捷软件开发的开放封闭原则。关于各种设计模式,可以看卡奴达摩的专栏

3.3 Interface Builder和Storyboard

一般写iOS的UI有三种方式。xib,Storyboard以及代码创建。

我之前自学用了一会的xib,之后一直用代码创建,代码更容易区做多语言版本,而且

xib启动需要事件比用代码直接写慢,xib文件比代码建立UI文件也大。

具体对比可以看喵神的博客代码手写,xib和StoryBoard间的博弈

3.4 常用系统框架和第三方库

UIKit是最常用的框架,主要是用来做UI的。包括视图UIButton、UILabel,控制器UIViewController等,还有一些触摸事件、手势等。

QuartzCore、CoreAnimation框架是一些绘图、动画的类库。

第三方库的话,可以查看github上object -c的仓库排名,Search · GitHub 。

3.5数据存储

iOS数据存储主要有四种方式。

NSKeyedArchiver,采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议。归档形式保存数据只能一次性归档保存以及一次性解压,只能针对小量谁,而且数据操作笨拙,即如果想改动数据的某一小部分,需要解压整个数据或者归档整个数据。

NSUserDefaults,用来保存应用程序设置和属性。

第三种,Write写入文件。

第四种,相对前两种更为复杂,但也最好用。SQLite,可以自己封装,也可以使用FMDataBase等第三方封装库,还可以使用系统的CoreData。

3.6数据通信

iOS的数据通信有几种方式,应用层的HTTP,以及传输层的封装TCP或者UDP的socket接口,还有就是蓝牙通讯。

HTTP的网络服务一般可以用post、get或者soap等方式请求数据,可以用系统的NSURL也可以用第三方类库(MKNetWorkKit、AFNetWorking),这两种类库都可以做缓存,数据交换的格式一般有JSon和xml。

socket可以通过c语言的socket和CoreFoundation框架的CFNetwork实现,也可以用第三方类库asyncsocket。

蓝牙4.0的话使用的是CoreBluetooth框架。

3.7多线程编程

iOS的多线程有NSThread、NSOperation以及GCD。NSThread比其他两个轻量级,但是需要自己管理线程的生命周期,线程同步。 线程同步对数据加锁会有一定的系统开销。operation则不需要关心线程管理,GCD是一个替代NSThread和operation的技术。

3.8iPad开发

iPad和iPhone开发是异曲同工,但是不要试图去适配iPad和iPhone,因为他们的UI差别太大。

3.9其他

iOS的地图是使用MapKit框架,定位用CoreLocation。

iOS有一个云端机制iCloud,iOS还有一个推送机制,可以由服务器推送消息到手机应用程序,iOS还可以做本地化。

iOS有一些内置的传感器可以利用起来编程,比如三轴加速传感器,用来测加速度的,还有陀螺感应器,测角速度,感知移动的。

关于iOS的相机、相册以及音视频都有相应的类库。

4 工具

第一是多人协作的问题,你可以用svn或者git,git是比较流行的,但是大多数的公司还在用svn;

第二,iOS的数据持久化有很多方案,最高效的就是sqlite,在mac上有很多sqlite的可视化管理工具,我用的是sqlitemanager。

第三,关于查看模拟器或者真机的沙盒内容,模拟器可以使用SimPholders,真机可以用ifunbox。

第四,屏幕取色工具,sip。

第五,另外xcode也可以安装很多辅助工具,例如,格式化xcode代码的ClangFormat,第三方库管理工具CocoaPods,压力测试工具uiautomonkey。

第六,移动开发有一些常用的平台的,比提供社会化分享、统计分析等的友盟,sharesdk;内测平台fir.im,蒲公英;云测平台testin;广告平台google的admob

5 书籍 网站推荐

关于看书,对于某一个东西入门的化,其实不适合看书,或者你想看随便挑一本入门的书就跟着看就好了。

code4appiOS开发社区 – 开源中国社区cocoachina是国内常用的三大代码库网站,国外我会上版本控制的网站github,并且欢迎关注我的github,coderyi

这里有一个别人整理的iOS学习资料,

马上着手开发 iOS 应用程序 (apple官方整理),

Aufree/trip-to-iOS · GitHub(资料最全) ,

iOS资源 – Code4App.com ,

iOS开发60分钟入门 ,

iOS开发从新手到上架

6 iOS学习路线图

最后附赠一张传智播客的iOS学习路线图 ,这一些东西只是iOS开发的冰山一角,哪一东西要做好都要学很多东西,学好最重要的就是你对他的热情,路漫漫其修远兮,吾将上下而求索。

时间: 2024-08-30 04:50:04

iOS开发学习 阶段过程简述的相关文章

ios开发 学习积累20161027~

学习ios这几天来,总结下,函数的定义,调用.跟其他语言都有一定的区别: 几个特别重要的就是对象的迭代的使用和判断.取随机数.动画的实现及数组的升入研究等等 之前的总结地址 ios开发 学习积累20161024~20161026: http://www.cnblogs.com/jasonxu19900827/p/5994919.html ib和storyboard开发的区别 看了ib开发和storyboard开发,从ios6开始xcode就用storyboard取代了nib. ib写的代码多点,

IOS开发学习笔记--语音合成(科大讯飞)

      现在语音服务越来越热,我们平时使用的很多软件都带有语音合成和识别功能,用起来也很方便.说到语音服务,Google和微软都提供过API接口,不过笔者要介绍的是国内的智能语音技术提供商---科大讯飞.之前看过一个比较Google.微软和科大讯飞语音识别引擎的博文(http://fqctyj.blog.163.com/blog/static/70843455201361955322797/),有兴趣可以去看看.笔者接触语音服务的时间也不长,对语音服务也不是很了解,但是拆解过科大讯飞的Dem

ios开发学习资料总汇

ios开发学习资料总汇 下面是收集的一些学习资料. 1.唐巧精心整理了国内40多位iOS开发博主的博客地址列表 2.ios常见加密: 链接: http://pan.baidu.com/s/1eQTGFIE 密码: p8ay 3.

IOS开发学习笔记-(2)键盘控制,键盘类型设置,alert 对话框

一.关闭键盘,放弃第一响应者,处理思路有两种 ① 使用文本框的 Did End on Exit 绑定事件 ② UIControl on Touch 事件 都去操作 sender 的  resignFirstResponder #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtUserName; @pro

iOS开发学习笔记:基础篇

iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境),Xcode是一个集成开发环境,包括了编辑器.调试.模拟器等等一系列方便开发和部署的工具,iOS SDK则是开发应用所必需,不同的SDK分别对应不同的iOS版本或设备,通常我们需要下载多个iOS SDK以确保我们开发的程序能够在不同版本的iOS上正常运行. 创建新工程 Xcode提供了很多种工程模

11个超棒的iOS开发学习网站

11个超棒的iOS开发学习网站 原文:11 Insanely Great iOS Developers Sites永不止步地向他人学习 我相信,要想从一个"还不错"的人变成一个卓越的人,我们需要不停地向他人学习,同时还得尽早地适应最新的技术和工具.除了苹果官方文档网站之外,我列举了一些能获取有价值的文章和资源的网站,这些网站能够帮助我们更上一个台阶. 让我们先看一些原创内容博客: objc.io 这个网站由世界级的iOS工程师每月进行更新.上面可以看到关于某些话题的高质量文章和深度评论

IOS开发学习笔记-(3) 进度条、等待动画开始停止

一.创建对应空间视图  ,如下图: 二.编写对应的 .h 代码,如下 : #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activWaitNetWork; @property (weak, nonatomic) IBOutlet UIProgressView *pgrsDownLo

IOS开发学习笔记(二)-语音识别(科大讯飞)

上次简单地讲解了如何利用科大讯飞完成语音合成,今天接着也把语音识别整理一下.当然,写代码前我们需要做的一些工作(如申请appid.导库),在上一篇语音合成的文章当中已经说过了,不了解的可以看看我上次的博文,那么这次直接从堆代码开始吧. 详细步骤: 1.导完类库之后,在工程里添加好用的头文件.在视图里只用了一个UITextField显示识别的内容,两个UIButton(一个开始监听语音,一个结束监听),然后引入类.添加代理,和语音合成的一样. MainViewController.h 1 #imp

IOS开发学习笔记(1)-----UILabel 详解

1. [代码][C/C++]代码     //创建uilabelUILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)];//设置背景色label1.backgroundColor = [UIColor grayColor];//设置taglabel1.tag = 91;//设置标签文本label1.text = @"Hello world!";//设置标签文本字体和字体大小label1.