![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS开发那些事
文章平均质量分 92
码农老关【关东升】
20多年的老程序员,技术作家、架构师、项目经理。
熟悉Java、Kotlin、Python、iOS、Android、游戏开发。参与设计和开发北京市公交一卡通百亿级大型项目,金融系统微博等移动客户端项目。著有从小白到大牛系列、漫画Python等畅销书作者!《iOS开发指南》等50多部图书。
展开
-
iOS开发那些事--创建基于故事板的iOS 6的HelloWorld
基于故事板的HelloWorld工程Storyboard(故事板)是用来替代xib的技术,也是iOS 5最重要的新特性之一。我们用Storyboard(故事板)重构HelloWorld。使用故事板重构HelloWorld勾选“Use Storyboards”项。工程创建完成之后,通过导航进入MainStoryboard.storyboard 添加Label控件原创 2013-01-23 15:34:50 · 2083 阅读 · 0 评论 -
iOS开发那些事--创建基于nib的iOS 6的HelloWorld工程
创建基于nib的HelloWorld工程创建工程启动Xcode,点击File→New→Project菜单,在打开的Choose a template for your new project界面中,选择Single View Application工程模板然后点击Next按钮,随即出现界面。 这里我们需要按照提示并结合自己的实际情况和需要输入相关内容。下面简要说明原创 2013-01-23 15:24:56 · 2651 阅读 · 0 评论 -
iOS开发那些事--nib、xib与故事板的关系
nib、xib与故事板如果大家使用过苹果的官方资料,一定会发现某些资料上会提到nib文件,那么nib与xib是怎样的一种关系呢?最初只有nib文件,后来将其更名为xib,但大家一直沿袭nib这个叫法(即称xib文件为nib文件),所以目前为止,nib等同于xib。xib文件采用xml格式。前文已提到故事板是用来替代xib的,那么两者除后缀名外,还存在哪些差异呢?首先,在数量上,使用原创 2013-01-25 16:49:55 · 8335 阅读 · 0 评论 -
iOS开发那些事--iOS6 UI状态保持和恢复
iOS设计规范中要求,当应用退出的时候(包括被终止运行时候),画面中UI元素状态需要保持的,当再次进来的时候看状态与退出是一样的。iOS6之后苹果提供以下API使得UI状态保持和恢复变得很容易了。在iOS6中我们可以在3地方实现状态保持和恢复:应用程序委托对象视图控制器自定义视图为了演示这个功能实现,我们把基于故事板的HelloWorld工程改造一下,在画面中添加一个文本框原创 2013-01-28 10:24:03 · 10798 阅读 · 1 评论 -
iOS开发那些事--iOS视图生命周期与视图控制器关系
iOS中视图是一个应用的重要组成部分,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻。视图生命周期与视图控制器关系以视图的5种状态为基础,我们来系统的了解一下视图控制器的生命周期。在视图不同的生命周期,视图控制器会回调不同的方法。viewDidLoad方法:视图控制器已被实例化,在视图被加载到内存中的时候调用该方法,这个时候视图并未出现。在该方法中通常原创 2013-01-30 09:18:03 · 3352 阅读 · 0 评论 -
iOS开发那些事--性能优化–内存泄露问题的解决
内存泄漏问题的解决内存泄漏(Memory Leaks)是当一个对象或变量在使用完成后没有释放掉,这个对象一直占有着这块内存,直到应用停止。如果这种对象过多内存就会耗尽,其它的应用就无法运行。这个问题在C++、C和Objective-C的MRR中是比较普遍的问题。在Objective-C中释放对象的内存是发送release和autorelease消息,它们都是可以将引用计数减1,当为引用计数原创 2013-02-01 14:14:04 · 3319 阅读 · 1 评论 -
iOS开发那些事-性能优化–查找和解决僵尸对象
内存泄漏是当一个对象或变量在使用完成后没有释放掉,那么如果我们走了另外一个极端情况会什么样呢?这就导致过渡释放(over release)问题,从而使对象“僵尸化”,对象称为僵尸(zombies)对象。一个对象已经被释放过了,或者调用者没有这个对象的所有权而释放它,都会造成过渡释放,产生僵尸对象。僵尸对象或许对很多人听起来很恐怖、也很陌生,如果要说起EXEC_BAD_ACCESS异常,可能大家原创 2013-02-05 14:24:23 · 4203 阅读 · 1 评论 -
iOS开发那些事--编写OCUnit测试方法-逻辑测试方法
应用测试和逻辑测试添加OCUnit到工程时候,我们提到过,应用测试(Application Testing)和逻辑测试(Logic Testing)两个概念,它们并非是OCUnit中的概念,而是单元测试中概念。应用测试是对整个应用程序进行的测试,设计测试用例时候要考虑到运行环境等因素,例如在测试JavaEE时候需要考虑Web容器和EJB容器等环境问题。而逻辑测试则是轻量级的,只测试某个业务逻辑原创 2013-01-21 12:57:04 · 3477 阅读 · 2 评论 -
iOS开发那些事-性能优化–autorelease的使用问题
在MRR中释放对象通过release或autorelease消息实现,release消息会立刻使引用计数-1释放,发送autorelease消息会使对象放入内存释放池中延迟释放,对象的引用计数并不真正变化,而是向内存释放池中添加一条记录,直到当池被销毁前会通知池中的所有对象全部发送release消息真正将引用计数减少。由于会使对象延迟释放,除非必须,否则不要使用autorelease释放对象,原创 2013-02-07 09:09:53 · 4215 阅读 · 0 评论 -
iOS开发那些事--编写OCUnit测试方法-应用测试方法
应用测试方法应用测试是测试应用程序的一些功能,这个功能具体到点击一个按钮触发一个事件,因此它主要是测试表示层。我们看看视图控制器ViewController.m中有那些方法需要测试,然后再来设计测试用例。@implementation ViewController- (void)viewDidLoad{[super viewDidLoad];}- (void)didRe原创 2013-01-21 18:02:45 · 2422 阅读 · 4 评论 -
iOS开发那些事-响应内存警告
好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在iOS中我们可以在应用程序委托对象、视图控制器以及其它类中获得系统内存警告消息。1、应用程序委托对象在应用程序委托对象中接收内存警告消息,需要重写applicationDidReceiveMemoryWarning:方法。AppDelegate的代码片段:- (void)applicationDidReceiveMemory原创 2013-02-11 08:16:04 · 7901 阅读 · 0 评论 -
iOS开发那些事-关于性能优化–选择nib还是故事板的讨论
故事板是苹果在iOS5之后推出的技术,本意是集成多个nib文件于一个故事板文件,管理起来方便,故事板还能反应控制器之间的导航关系,很多导航是需要连连线就可以了,不需写代码,使用起来很方便。但是我告诫读者,从内存占用角度看故事板不是一个好的技术。为了比较我们使用Xcode中的Master-Detail模板分别创建,基于故事板的应用StoryboardDemo和基于nib的应用NibDemo。然后原创 2013-02-15 10:19:26 · 2317 阅读 · 0 评论 -
iOS开发那些事-iOS常用设计模式–委托模式
对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析。当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式、委托模式、观察者模式、MVC模式。委托模式委托模式从GoF 设计装饰(Decorator)、适配器(Adapter)和模板方法(Template Method)等模式演变而来。几乎每一个应用都会或多或少地使用到委托模式。不只是CocoaTo原创 2013-02-21 16:55:29 · 3587 阅读 · 0 评论 -
iOS开发那些事-表视图UI设计模式
软件设计中有设计模式,在UI设计方面也有设计模式。由于表视图的应用在iOS中极其广泛,本节向大家介绍表视图中两个UI设计模式:分页模式和下拉刷新(Pull-to-Refresh)模式。这两种模式已经成为移动平台开发的标准。分页模式 分页模式规范了移动平台进行大量数据请求的处理方式 。下拉刷新模式下拉刷新(Pull-to-Refresh)是重新刷新表视图或列表,原创 2013-03-05 13:18:14 · 3341 阅读 · 0 评论 -
iOS开发那些事-iOS常用设计模式–委托模式案例实现
书接上回,应用案例我们以UITextFieldDelegate为例来说明一下委托的使用。UITextFieldDelegate是控件UITextField的 委托,控件的委托主要负责响应控件事件或控制其他对象。除了UITextField,WebView、UITableView等控件也有相应的委托对象。打开UITextFieldDelegate的API文档,其中有4个有关编辑的方法,还要3个原创 2013-02-25 09:55:09 · 6801 阅读 · 0 评论 -
iOS开发那些事--简单表视图
表视图是iOS开发中使用最频繁的视图,我们一般都会选择以表的形式来展现数据,比如通讯录、频道列表等。表视图分段、分组、索引等功能使我们所展示的数据看起来更规整更有调理,更令人兴奋的是表视图还可以利用细节展示等功能多层次的展示数据,正所谓一表胜千言。 不过,相较于其它控件表视图的使用比较复杂,但是对比于表视图各种灵活多变的功能,我们在使用上花费的努力还是相当值得的。简单表视图表视图的形式原创 2013-02-27 16:17:18 · 2722 阅读 · 0 评论 -
iOS开发那些事-平铺导航-基于Page的导航及案例实现
基于分页导航实现在iOS 5之后,可以使用分页控制器(UIPageViewController)构建类似于电子书效果的应用,我们称为基于分页的应用。一个分页应用有很多相关的视图控制器 分页控制器(PageViewController)需要放置在一个父视图控制器中,在分页控制器下面还要有子视图控制器,每个子视图控制器对应图中的一个页面。在基于分页导航实现的应用中需要的类和协议:U原创 2013-03-11 16:41:03 · 5066 阅读 · 0 评论 -
iOS开发那些事-nib实现标签导航
nib实现标签导航在目前的Xcode(4.5)版本创建标签导航的应用可以使用工程模板 Tabbed Application。我们可以选择故事板或nib技术实现。故事板创建固然简单,但这种实现方式屏蔽了标签导航很多技术细节,为了更有益于我们学习, 在实现环节我们分别采用了nib技术和storyboard技术。首先我们来看看用nib技术实现的过程。使用“Tabbed Application原创 2013-03-13 10:41:17 · 9503 阅读 · 17 评论 -
iOS开发那些事--自定义单元格实现
自定义单元格当苹果公司提供给的单元格样式不能我们的业务需求的时候,我们需要自定义单元格。在iOS 5之前,自定义单元格可以有两种实现方式:代码实现和用xib技术实现。用xib技术实现相对比较简单,创建一个xib文件,然后定义一个继承UITableViewCell类单元格类即可。在iOS 5之后我们又有了新的选择,故事板实现方式,这种方式比xib方式更简单一些。我们把简单表视图案例的原型原创 2013-03-01 14:15:28 · 5004 阅读 · 0 评论 -
iOS网络编程--ASIHTTPRequest框架安装和配置-图文解说
ASIHTTPRequest框架是优秀的第三方Objective-C的HTTP框架,支持Mac OS X和iOS下的HTTP开发。技术支持网站是http://allseeing-i.com/ASIHTTPRequest/。具有如下优点:支持下载数据放在内存或本地文件容易访问请求和应答HTTP header支持Cookie支持GZIP请求或应答支持缓存支持同步或异步请求支持HTTPS但ASIHTTP原创 2013-03-29 15:13:25 · 3239 阅读 · 2 评论 -
iOS开发那些事-故事板实现标签导航
故事板实现标签导航用故事板技术实现标签导航模式。使用“Tabbed Application”模版,创建一个名为 “TabNavigationStoryborad”的工程。勾选“Use Storyborads”、“Use Automatic Reference Counting”。创建完成之后打开MainStoryboard.storyboard。三个Controller Scene 会有由一些线连原创 2013-03-18 09:06:54 · 8217 阅读 · 5 评论 -
iOS网络编程-ASIHTTPRequest框架同步请求
在ASIHTTPRequest框架中与HTTP请求相关的类有:ASIHTTPRequest和ASIFormDataRequest,其中最常用的是ASIHTTPRequest,ASIFormDataRequest是ASIHTTPRequest的子类,ASIFormDataRequest可以发送类似与HTML表单数据,也可以上传数据,默认采用POST请求方法。也可以其它的HTTP请求方法。它们都可以进原创 2013-04-01 08:21:27 · 3978 阅读 · 2 评论 -
iOS开发那些事-平铺导航–基于分屏导航及案例实现
平铺导航模式是非常重要的导航模式。一般用于简单的扁平化信息浏览或任务。扁平化信息是指这些信息之间没有从属的层次关系,如中国的城市中北京、上 海和哈尔滨之间是扁平化信息,而哈尔滨市与黑龙江省之间的关系是从属的层次关系,层次关系信息可以采用标签导航和树形结构导航。从一个案例开始介绍平铺导航。如果我想为开发一个基于iPhone的“画廊”应用,目前只有3幅名画(左图是达芬奇-蒙娜丽莎、中图是罗丹-思想者、原创 2013-03-07 10:58:39 · 4624 阅读 · 0 评论 -
iOS网络编程-ASIHTTPRequest异步请求
我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好。因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用。异步请求的用户体验要比同步请求好,因此一般情况下异步请求用的很多。等待过程中在状态栏上会出现网络等待指示器的经典旋 转小图标,而使用ASIHTTPRequest异步请求就实现这些效果,不用自己额外编写代码。ASIHTTPRequest和ASIF原创 2013-04-03 09:24:04 · 5677 阅读 · 4 评论 -
iOS开发那些事-Git在Xcode中的配置与使用常见问题总结
书接上回提出的Git在Xcode中的配置与使用常见问题4个问题问题1,如何在Xcode中创建代码库,并添加和提交代码到代码库?问题2,如何在Xcode中提交推送给远程服务器代码库?问题3,如何在Xcode中克隆远程服务器代码库到本地?问题4,如何使用Xcode获取远程代码库数据,并解决冲突问题? 1、问题1创建代码库有两种方式,一种是新建工程时候创建,另一种是把现有的工程拷贝到代码库下,再初始化代原创 2013-03-21 10:01:49 · 3574 阅读 · 0 评论 -
iOS网络编程-ASIHTTPRequest小例子-数据请求队列
实例:请求队列我们通过一个例子介绍一下请求队列使用,我们设计了一个应用,用户点击GO按钮从服务器同时下载两张图片显示在画面中。 我们直接看看主视图控制器ViewController.h代码如下:#import “ASIHTTPRequest.h”#import “ASINetworkQueue.h”#import “NSNumber+Message.h”#import “NSStrin原创 2013-04-05 08:32:57 · 3886 阅读 · 0 评论 -
iOS开发那些事-Git在Xcode中的配置与使用
很多Git命令都是在命令行下运行的,命令行下管理Git有很多优点不用多说。但最大的缺点是要求用户记住这些命令。因此Git图形界面还是很受一些用户欢迎的,其中Xcode作为集成开发环境工具,也提供了一定Git图形界面功能。但是要想在Xcode中使用Git管理工程代码还想需要进行一些配置,然后才能使用。如果我们是使用Xcode 4创建的一个iOS工程,在终端的命令行中提交代码时候,可能会出现下面的部分原创 2013-03-20 08:23:59 · 13103 阅读 · 1 评论 -
iOS网络编程-MBProgressHUD等待指示器
第三方的等待指示器,MBProgressHUD就是第三方提供的等待指示器框架。下面是MBProgressHUD提供的等待指示器样式,它们基本可以分为:未知结束时间和已知结束时间两大类等待指示器,在MBProgressHUD中可以为等待指示器添加标签和详细标签MBProgressHUD的下载地址是https://github.com/matej/MBProgressHUD,我们将下载的源文件中的MB原创 2013-04-09 10:21:21 · 7256 阅读 · 5 评论 -
iOS开发那些事-iOS网络编程异步GET方法请求编程
上篇博客提到同步请求,同步请求用户体验不好,并且介绍了在同步方法上实现异步,事实上iOS SDK也提供了异步请求的方法。异步请求会使用NSURLConnection委托协议NSURLConnectionDelegate。在请求不同阶段会回调委托对象方法。NSURLConnectionDelegate协议的方法有:connection:didReceiveData: 请求成功,开始接收数据,如果数据原创 2013-03-27 10:04:58 · 3013 阅读 · 3 评论 -
iOS网络编程实践--蓝牙对等网络通信实例讲解
基于蓝牙对等网络通信就是使用Game Kit中的GKSession、GKSessionDelegate、GKPeerPickerController和GKPeerPickerControllerDelegate来实现。开发过程分为3个步骤:连接、发送数据和接收数据。下面我们通过一个实例介绍一下基于蓝牙对等网络通信过程。用户点击“连接”按钮,建立连接过程中会出现连接对话框,根据具体情况也会弹出其它的原创 2013-04-10 08:47:57 · 13480 阅读 · 12 评论 -
iOS开发那些事-iOS网络编程同步GET方法请求编程
iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法。我们先了解其中最为简单的同步GET方法请求。为了学习这些API的使用MyNotes“备忘录”应用实例,数据来源于服务器端,而不是本地的Notes.xml(或Notes.json)文件。首先实现查询业务,查询业务请求可以在主视图控制器MasterViewController类中实现,其中Mast原创 2013-03-25 09:42:14 · 4059 阅读 · 5 评论 -
iOS网络编程-iOS中Socket编程介绍
使用Socket进行C/S结构编程,连接过程 服务器端监听某个端口是否有连接请求。服务器端程序处于堵塞状态,直到客户端向服务器端发出连接请求,服务器端接受请求程序才能向下运行。一旦连接建立起来,通过Socket可以获得输入输出流对象。借助于输入输出流对象就可以实现与客户端的通讯,最后不要忘记关闭Socket和释放一些资源(包括:关闭输入输出流)。客户端流程是先指定要通讯的服务器IP地址、端口和采用原创 2013-04-12 11:09:27 · 5264 阅读 · 1 评论 -
iOS开发那些事-构建自适应iPhone和iPad工程
有的时候应用需要能够在iPhone和iPad上运行,当然我们可以选择做两个完全不同的工程,然后共用一些类,但是我们也可以只创建一个工程,然后编译生成一个产品,这个产品能够自适应iPhone和iPad设备,然后在App Stroe发布的时候,它会有两套不同的截图展示给用户。App Store上的Evernote应用,它有两套截图iPhone和iPad,这说明Evernote就是自适应iPhone和i原创 2013-04-22 16:05:59 · 9557 阅读 · 0 评论 -
iOS网络编程实践--NSStream实现TCP Socket iPhone客户端
客户端我们使用iPhone应用程序,画面比较简单。点击发送按钮,给服务器发送一些字符串过去。点击接收按钮就会从服务器读取一些字符串,并且显示在画面上。有关客户端应用的UI部分不再介绍了,我们直接看代码部分,Socket客户端可以采用CFStream或NSStream实现。为了给读者介绍更多的知识,本例我们采用NSStream实现。NSStream实现采用Objective-C语言,一些面向对象的类原创 2013-04-15 11:37:03 · 18029 阅读 · 5 评论 -
iOS开发那些事-移动平台架构设计
低耦合企业级系统架构设计我们往往称JavaEE或.Net 开发的产品为“系统”,而移动平台(主要是:Android、iOS和Window Phone)开发的产品为“应用”。“系统”比较复杂,需要架构设计,而“应用”相对比较简单,这是不是意味着我们不需要考虑架构问题呢? 我们首先了解一下企业级系统架构设计。软件设计的原则是提高软件系统的“可复用性”和“可扩展性”,系统架构设计采用层次划分方式,这些层原创 2013-04-24 09:11:29 · 10371 阅读 · 8 评论 -
iOS网络编程-配置iCloud-图文解说
配置iCloud开发iCloud应用一方面需要准备真实的iOS设备,另一方面还需要有iOS开发者账号,使用iOS开发者账号登录到iOS开发中心的配置门户网站(iOS Provisioning Portal 网址为https://developer.apple.com/ios/manage/overview/index.action),可以为应用做一些与iCloud有关的配置工作。这些工作包括:创建原创 2013-04-26 09:59:13 · 3595 阅读 · 0 评论 -
iOS网络编程-iCloud文档存储编程实例
iCloud文档存储编程相对键值数据存储而言比较复杂,涉及到自定义文档类、获得iCloud文档目录、查找Ubiquity容器中的文档、保存文档和解决文档冲突等内容。实例:iCloud文档存储编程设计实例介绍一下iCloud文档存储编程过程,画面中有一个文本框和一个按钮控件,在设备1输入内容,点击“保存数据”按钮,将数据保存iCloud服务器。右图是设备2画面,过几秒钟后设备2上会读取iCloud服原创 2013-05-02 08:06:39 · 4114 阅读 · 0 评论 -
如何配置iOS推送通知
配置推送通知比较麻烦,需要iOS开发者帐号,然后配置一个Apple ID、配置概要文件和SSL证书。 1 证书签名请求首先需要证书签名请求,这需要在Mac OS X系统中完成,通过在系统中选择“实用工具”→“钥匙串访问”,然后在打开菜单“钥匙串访问”→“证书助理”→“从证书颁发机构请求证书…”。选择“从证书颁发机构请求证书”菜单后会弹出证书助手对话框,在用户电子邮件地址输入你的邮件地址,常用名称中原创 2013-05-14 09:13:38 · 3060 阅读 · 0 评论 -
iOS开发那些事-如何编译iOS程序
我们从编写到发布应用会经历3个阶段:模拟器上运行调试、设备上运行调试和发布编译,苹果为了防止非法设备和非开发人员调试和发布应用,使用配置概要文件(Provisioning Profiles)控制在设备上运行调试和发布编译阶段,配置概要文件分为两种:开发配置概要文件和发布配置概要文件1、创建发布配置概要文件创建过程是先登录iOS开发中心的配置门户网站(iOS Provisioning Portal)原创 2013-05-31 09:39:44 · 3237 阅读 · 1 评论 -
iOS开发那些事-Passbook详解与开发案例(附视频)
Passbook是iOS 6的新功能,只能在iPhone和iPod touch设备中使用。它可以帮助我们管理商家发放的电子会员卡、积分卡、优惠券等。这将对未来电子商务产生深远的影响。商家通过发放会员卡、积分卡、优惠券等,提高与消费者的互动,吸引人们更多消费。Passbook的诞生,正是为了将所有这些“卡”和“券”电子化,存放在iPhone或iPod touch里。Passbook与PassiOS原创 2013-05-29 10:14:48 · 8658 阅读 · 3 评论