摘要: 好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在iOS中我们可以在应用程序委托对象、视图控制器以及其它类中获得系统内存警告消息。1、应用程序委托对象在应用程序委托对象中接收内存警告消息,需要重写applicationDidReceiveMemoryWarning:方法。AppDelegate的代码片段:- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{NSLog(@”AppDelegate中调用applicationDidReceiveMemoryWarning:”);}2、视图控制器在 阅读全文
posted @ 2013-02-11 08:23 智捷iOS课堂 阅读(1216) 评论(0) 推荐(1) 编辑
摘要: 在MRR中释放对象通过release或autorelease消息实现,release消息会立刻使引用计数-1释放,发送 autorelease消息会使对象放入内存释放池中延迟释放,对象的引用计数并不真正变化,而是向内存释放池中添加一条记录,直到当池被销毁前会通知池 中的所有对象全部发送release消息真正将引用计数减少。由于会使对象延迟释放,除非必须,否则不要使用autorelease释放对象,在iOS程序中默认内存释放池的释放是在程序结束,应用程序入口main.m文件代码如下:int main(int argc, char *argv[]){@autoreleasepool {return 阅读全文
posted @ 2013-02-07 09:12 智捷iOS课堂 阅读(1688) 评论(0) 推荐(1) 编辑
摘要: 内存泄漏是当一个对象或变量在使用完成后没有释放掉,那么如果我们走了另外一个极端情况会什么样呢?这就导致过渡释放(over release)问题,从而使对象“僵尸化”,对象称为僵尸(zombies)对象。一个对象已经被释放过了,或者调用者没有这个对象的所有权而释放它, 都会造成过渡释放,产生僵尸对象。僵尸对象或许对很多人听起来很恐怖、也很陌生,如果要说起EXEC_BAD_ACCESS异常,可能大家并不陌生。试图调用僵尸对象方法应用会崩溃(应用直接跳出),并抛出异常EXEC_BAD_ACCESS。我们看看代码ViewController的代码片段:- (void)tableView:(UITabl 阅读全文
posted @ 2013-02-05 14:32 智捷iOS课堂 阅读(1375) 评论(0) 推荐(3) 编辑
摘要: 内存泄漏问题的解决内存泄漏(Memory Leaks)是当一个对象或变量在使用完成后没有释放掉,这个对象一直占有着这块内存,直到应用停止。如果这种对象过多内存就会耗尽,其它的应用就无法运行。这个问题在C++、C和Objective-C的MRR中是比较普遍的问题。在Objective-C中释放对象的内存是发送release和autorelease消息,它们都是可以将引用计数减1,当为引用计数为0时候,release消息会使对象立刻释放,autorelease消息会使对象放入内存释放池中延迟释放。上代码:- (void)viewDidLoad{[super viewDidLoad];NSBundl 阅读全文
posted @ 2013-02-01 14:22 智捷iOS课堂 阅读(5420) 评论(2) 推荐(2) 编辑
摘要: iOS中视图是一个应用的重要组成部分,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻。视图生命周期与视图控制器关系以视图的5种状态为基础,我们来系统的了解一下视图控制器的生命周期。在视图不同的生命周期,视图控制器会回调不同的方法。viewDidLoad方法:视图控制器已被实例化,在视图被加载到内存中的时候调用该方法,这个时候视图并未出现。在该方法中通常进行的是对所控制的视图进行初始化处理。视 图可见前后会调用viewWillAppear:方法和viewDidAppear:方法;视图不可见前后会调用viewWillDisappear:方 法和viewDidDisap 阅读全文
posted @ 2013-01-30 09:26 智捷iOS课堂 阅读(1477) 评论(2) 推荐(1) 编辑
摘要: iOS设计规范中要求,当应用退出的时候(包括被终止运行时候),画面中UI元素状态需要保持的,当再次进来的时候看状态与退出是一样的。iOS6之后苹果提供以下API使得UI状态保持和恢复变得很容易了。在iOS6中我们可以在3地方实现状态保持和恢复:应用程序委托对象视图控制器自定义视图为了演示这个功能实现,我们把基于故事板的HelloWorld工程改造一下,在画面中添加一个文本框用户在文本框中输入一些内容,应用程序退出并且终止后再次进来的时候,文本框中还会保持原来输入的内容。然后在IB的Scene中选中View Controller,打开右边的标识检查器,设置Restoration ID(恢复标识) 阅读全文
posted @ 2013-01-28 10:39 智捷iOS课堂 阅读(1743) 评论(0) 推荐(1) 编辑
摘要: nib、xib与故事板如果大家使用过苹果的官方资料,一定会发现某些资料上会提到nib文件,那么nib与xib是怎样的一种关系呢?最初只有nib文件,后来将其更名为xib,但大家一直沿袭nib这个叫法(即称xib文件为nib文件),所以目前为止,nib等同于xib。xib文件采用xml格式。前文已提到故事板是用来替代xib的,那么两者除后缀名外,还存在哪些差异呢?首先,在数量上,使用故事板技术时,一个工程只有一个故事板文件。当使用xib技术时,xib在数量上与视图控制器相对应,而一个工程可能会有很多视图控制器,相应地就会有很多xib文件。其次,故事板与视图的关系可以在IB设计器中很明显地体现,而 阅读全文
posted @ 2013-01-25 16:54 智捷iOS课堂 阅读(2788) 评论(6) 推荐(0) 编辑
摘要: 基于故事板的HelloWorld工程Storyboard(故事板)是用来替代xib的技术,也是iOS 5最重要的新特性之一。我们用Storyboard(故事板)重构HelloWorld。使用故事板重构HelloWorld勾选“Use Storyboards”项。工程创建完成之后,通过导航进入MainStoryboard.storyboard添加Label控件 阅读全文
posted @ 2013-01-23 15:39 智捷iOS课堂 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 创建基于nib的HelloWorld工程创建工程启动Xcode,点击File→New→Project菜单,在打开的Choose a template for your new project界面中,选择Single View Application工程模板然后点击Next按钮,随即出现界面。这里我们需要按照提示并结合自己的实际情况和需要输入相关内容。下面简要说明选项。Product Name:工程名字。Organization Name:组织名字。Company Identifier:公司标识(很重要)。一般是将公司的域名倒过来输入进去(如com.51work6),这类似于Java中的包命名。 阅读全文
posted @ 2013-01-23 15:29 智捷iOS课堂 阅读(1003) 评论(2) 推荐(0) 编辑
摘要: 应用测试方法应用测试是测试应用程序的一些功能,这个功能具体到点击一个按钮触发一个事件,因此它主要是测试表示层。我们看看视图控制器ViewController.m中有那些方法需要测试,然后再来设计测试用例。@implementation ViewController- (void)viewDidLoad{[super viewDidLoad];}- (void)didReceiveMemoryWarning{[super didReceiveMemoryWarning];}- (IBAction)onClick:(id)sender {//关闭键盘[self.txtRevenue resignF 阅读全文
posted @ 2013-01-21 18:10 智捷iOS课堂 阅读(1599) 评论(3) 推荐(2) 编辑