国内著名iOS/Cocos技术作家,iOS技术顾问,Cocos最有价值专家(CVP),智捷课堂首席培训专家。担任51CTO社区iOS技术顾问。 著有多部移动开发畅销书。
<p>书接上回提出的Git在Xcode中的配置与使用常见问题4个问题</p> <p><span id="more-255"></span></p> <p>问题1,如何在Xcode中创建代码库,并添加和提交代码到代码库?</p> <p>问题2,如何在Xcode中提交推送给远程服务器代码库?</p> <p>问题3,如何在Xcode中克隆远程服务器代码库到本地?</p> <p>问题4,如何使用Xco
<p>很多Git命令都是在命令行下运行的,命令行下管理Git有很多优点不用多说。但最大的缺点是要求用户记住这些命令。因此Git图形界面还是很受一些用户欢迎的,其中Xcode作为集成开发环境工具,也提供了一定Git图形界面功能。但是要想在Xcode中使用Git管理工程代码还想需要进行一些配置,然后才能使用。</p> <p>如果我们是使用Xcode 4创建的一个iOS工程,在终端的命令行中提交代码
<p><strong>故事板实现标签导航</strong></p> <p>用故事板技术实现标签导航模式。</p> <p><span id="more-244"></span></p> <p>使用“Tabbed Application”模版,创建一个名为 “TabNavigationStoryborad”的工程。勾选“Use Storyborads”、“Use Automatic Referen
<p><strong>nib实现标签导航</strong></p> <p>在目前的Xcode(4.5)版本创建标签导航的应用可以使用工程模板 Tabbed Application。我们可以选择故事板或nib技术实现。故事板创建固然简单,但这种实现方式屏蔽了标签导航很多技术细节,为了更有益于我们学习, 在实现环节我们分别采用了nib技术和storyboard技术。首先我们来看看用nib技术
<p><strong>基于分页导航实现</strong></p> <p><span id="more-225"></span></p> <p>在iOS 5之后,可以使用分页控制器(UIPageViewController)构建类似于电子书效果的应用,我们称为基于分页的应用。一个分页应用有很多相关的视图控制器</p> <p align="center"> <a href="http:/
<p>平铺导航模式是非常重要的导航模式。一般用于简单的扁平化信息浏览或任务。扁平化信息是指这些信息之间没有从属的层次关系,如中国的城市中北京、上 海和哈尔滨之间是扁平化信息,而哈尔滨市与黑龙江省之间的关系是从属的层次关系,层次关系信息可以采用标签导航和树形结构导航。</p> <p>从一个案例开始介绍平铺导航。如果我想为开发一个基于iPhone的“画廊”应用,目前只有3幅名画(左图是达芬奇-蒙娜
<p> 软件设计中有设计模式,在UI设计方面也有设计模式。由于表视图的应用在iOS中极其广泛,本节向大家介绍表视图中两个UI设计模式:分页模式和下拉刷新(Pull-to-Refresh)模式。这两种模式已经成为移动平台开发的标准。</p> <p><span id="more-205"></span></p> <p style="text-align:left"><stro
<p><strong>自定义单元格</strong></p> <p>当苹果公司提供给的单元格样式不能我们的业务需求的时候,我们需要自定义单元格。在iOS 5之前,自定义单元格可以有两种实现方式:代码实现和用xib技术实现。用xib技术实现相对比较简单,创建一个xib文件,然后定义一个继承UITableViewCell类单元格类即可。在iOS 5之后我们又有了新的选择,故事板实现方式,这种
<p>表视图是iOS开发中使用最频繁的视图,我们一般都会选择以表的形式来展现数据,比如通讯录、频道列表等。表视图分段、分组、索引等功能使我们所展示的数据看起来更规整更有调理,更令人兴奋的是表视图还可以利用细节展示等功能多层次的展示数据,正所谓一表胜千言。 不过,相较于其它控件表视图的使用比较复杂,但是对比于表视图各种灵活多变的功能,我们在使用上花费的努力还是相当值得的。</p> <p><
<p>书接上回,应用案例</p> <p>我们以UITextFieldDelegate为例来说明一下委托的使用。UITextFieldDelegate是控件UITextField的 委托,控件的委托主要负责响应控件事件或控制其他对象。除了UITextField,WebView、UITableView等控件也有相应的委托对象。</p> <p>打开UITextFieldDelegate的AP
<p>对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析。当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式、委托模式、观察者模式、MVC模式。</p> <p><span id="more-129"></span></p> <p>委托模式</p> <p>委托模式从GoF 设计装饰(Decorator)、适配器(Adapter)和模板方法(T
故事板是苹果在iOS5之后推出的技术,本意是集成多个nib文件于一个故事板文件,管理起来方便,故事板还能反应控制器之间的导航关系,很多导航是需要连连线就可以了,不需写代码,使用起来很方便。但是我告诫读者,从内存占用角度看故事板不是一个好的技术。 <p>为了比较我们使用Xcode中的Master-Detail模板分别创建,基于故事板的应用StoryboardDemo和基于nib的应用Nib
好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在iOS中我们可以在应用程序委托对象、视图控制器以及其它类中获得系统内存警告消息。 <p>1、应用程序委托对象</p> <p>在应用程序委托对象中接收内存警告消息,需要重写applicationDidReceiveMemoryWarning:方法。AppDelegate的代码片段:</p> <pre name="code"
在MRR中释放对象通过release或autorelease消息实现,release消息会立刻使引用计数-1释放,发送autorelease消息会使对象放入内存释放池中延迟释放,对象的引用计数并不真正变化,而是向内存释放池中添加一条记录,直到当池被销毁前会通知池中的所有对象全部发送release消息真正将引用计数减少。 <p>由于会使对象延迟释放,除非必须,否则不要使用autorelea
<p><strong>内存泄漏问题的解决</strong></p> <p>内存泄漏(Memory Leaks)是当一个对象或变量在使用完成后没有释放掉,这个对象一直占有着这块内存,直到应用停止。如果这种对象过多内存就会耗尽,其它的应用就无法运行。这个问题在C++、C和Objective-C的MRR中是比较普遍的问题。</p> <p>在Objective-C中释放对象的内存是发送rele
<div> <p>iOS中视图是一个应用的重要组成部分<span></span>,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻。</p> <p><strong>视图生命周期与视图控制器关系</strong></p> <p>以视图的5种状态为基础,我们来系统的了解一下视图控制器的生命周期。在视图不同的生命周期,视图控制器会回调不同的方法。</p> <p
iOS设计规范中要求,当应用退出的时候(包括被终止运行时候),画面中UI元素状态需要保持的,当再次进来的时候看状态与退出是一样的。iOS6之后苹果提供以下API使得UI状态保持和恢复变得很容易了。 <p>在iOS6中我们可以在3地方实现状态保持和恢复:</p> <p>应用程序委托对象</p> <p>视图控制器</p> <p>自定义视图</p> <p>为了演示这个功能实现,我们把基
<p><strong>nib、xib与故事板<span id="more-108"></span></strong></p> <p>如果大家使用过苹果的官方资料,一定会发现某些资料上会提到nib文件,那么nib与xib是怎样的一种关系呢?</p> <p>最初只有nib文件,后来将其更名为xib,但大家一直沿袭nib这个叫法(即称xib文件为nib文件),所以目前为止,nib等同于xib
<p><strong>基于故事板的HelloWorld工程<span id="more-102"></span></strong></p> <p>Storyboard(故事板)是用来替代xib的技术,也是iOS 5最重要的新特性之一。我们用Storyboard(故事板)重构HelloWorld。</p> <p><strong>使用故事板重构HelloWorld</strong></p>
<p>创建基于nib的HelloWorld工程</p> <p><span id="more-94"></span><a href="http://iosbook1.com/?attachment_id=95" rel="attachment wp-att-95"><img class="aligncenter size-full wp-image-95" alt="1" src="htt
<p><strong>应用测试方法</strong></p> <p>应用测试是测试应用程序的一些功能,这个功能具体到点击一个按钮触发一个事件,因此它主要是测试表示层。我们看看视图控制器ViewController.m中有那些方法需要测试,然后再来设计测试用例。</p> <pre name="code" class="cpp">@implementation ViewController
<p><strong>应用测试和逻辑测试</strong></p> <p><strong>添加OCUnit到工程时候,我们提到过,应用测试(Application Testing)和逻辑测试(Logic Testing)两个概念,它们并非是OCUnit中的概念,而是单元测试中概念。应用测试是对整个应用程序进行的测试,设计测试用例时候要考虑到运行环境等因素,例如在测试JavaEE时候需要考
<p><strong>使用OCUnit测试框架<span id="more-39"></span>iOS单元测试框架</strong></p> <p>原则上,是否使用测试框架都不会影响单元测试结果,但是“工欲善其事,必先利其器”使用单元测试框架更便于我们测试和分析结果。</p> <p>主要的iOS单元测试框架有:</p> <p>OCUnit,是开源测试框架,与Xcode工具集成在一起
<p>北京时间10月12日下午消息,据美国科技博客BusinessInsider报道,在今年9月推出iOS 6后,苹果开始通过一项名为IFA或IDFA的新技术追踪用户,发布精准广告。</p> <p>在此之前,广告主原本可以借助UDID识别码追踪iPhone用户,但苹果后来禁用了这一技术。但多名移动广告行业高管透露,通过IFA技术,iOS 6对用户的追踪效果将会加强。</p> <p>IF
<pre>ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(addressBook); for(int i = 0; i < CFArrayGetCount(results); i++) {
<p>通过代码块(block)功能,你就能像对待对象一般,指定要在方法和函数中传递任意代码部分。</p> <p>代码块的声明:</p> <p>int main (int argc, const char * argv[])<br> {</p> <p>@autoreleasepool {</p> <p>void (^myBlock) (NSString *x);//声明变量</p>
<div id="cnblogs_post_body"> <p>01 //获取当前时间<br> 02 NSDate *now = [NSDate date];<br> 03 NSLog(@”now date is: %@”, now);<br> 04<br> 05 NSCalendar *calendar = [NSCalendar currentCale
<p>多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法。</p> <p>本次介绍NSOperation的子集,简易方法的NSInvocationOperation:</p> <p>@implementation MyCustomClass
<p>object-c的多线程如java的多线程一样方便可靠。</p> <p>一、线程创建与启动<br> 线程创建主要有二种方式:<br> [cpp] view plaincopy</p> <p>- (id)init; // designated initializer<br> - (id)initWithTarget:(id)target selector:(SEL)selec
<p>对于iphone开发人员来说,内存管理是极为重要的技巧,哪怕程序的功能再强大,设计再漂亮,如果内存控制不好,也难逃程序莫名退出的噩运,这与网页开发是完全不同的。</p> <p>内存控制里面有很多门道,在这里分析一下 viewDidUnload 和 dealloc 的区别,关于这两者的区别的文章很多,但是大都是摘抄和翻译官方文档,有的也只是简单的说两句,并没有详细说出两者具体的区别。
UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将 javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。 <p> UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromS
<p>很多已经熟悉C/C++的朋友在初次使用Objective-C作为开发语言时不是很习惯,不过objective-C/C++本身又是几乎完全兼容GNU C/C++的。<br> 这里作为一个代码实例来描述Objective-C与objective-C++如何混合使用。其实这就同C与C++如何混用一样,还是非常容易上手的。<br> 不 过,为了能够更好地看清这一混合优势。项目中使用了ob
<div> <p>封装不封装,这是个问题。</p> <p>今天我在看Cocoa开发者邮件列表的时候,看到一个帖子,求助如何在两个View之间互相通信的问题。做Windows程序员的时间长的我都不好意思说了,我意识到,这个问题在我刚刚接触到Mac上的Objective-C时也遇到过。</p> <p>我现在可以提出这个问题的简化版:“我有一个对话框,获取了一些用户输入的数据。我现在需要从
<div><span style="font-family:lucida grande">1 随机数的使用<br> 头文件的引用<br> #import <time.h><br> #import <mach/mach_time.h><br> srandom()的使用<br> srandom((unsigned)(mach_absolute_time() &
<div> <div> <div>《iPhone与iPad开发实战--iOS经典应用剖析》第2章Objective-C语言基础,通过本章的学习,读者可以了解Objective-C基本语法,包括:数据类型、表达式,还有类、对象等概念。本节为Objective-C概述。</div> </div> <div><strong>第2章 Objective-C语言基础</strong></d
<span style="font-size:18px"><strong>3.3.5 <span style="font-family:黑体">主视图控制器代码</span></strong></span><br><br><span style="font-family:宋体">主视图控制器是</span>MainViewController<span style="font-family
<span style="font-size:18px"><strong>3.3.4<span style="font-family:黑体">主视图代码</span></strong></span><br><br><span style="font-family:宋体">在本应用中主视图中使用的视图是</span>MainView<span style="font-family:宋体">,
<span style="font-size:18px"><strong>3.3.3 <span style="font-family:黑体">主视图</span>UI </strong></span><br><br><span style="font-family:宋体">主视图如图</span>3-36<span style="font-family:宋体">所示是</span>Ma
RootViewController<span style="font-family:宋体">的</span>h<span style="font-family:宋体">文件编写完成我们接着编写</span>RootViewController<span style="font-family:宋体">的</span>m<span style="font-family:宋体">文件如“代码清
<span style="color:#000000"><span style="font-size:18px"><strong>3.3.2 <span style="font-family:黑体"> 视图翻转动画</span></strong></span></span><br><br><span style="font-family:宋体"><span style="color:#0
3.3 应用实战与讲解<br> 这一节我们将实际编写这个应用,边做边讲解的方式。按照搭建应用骨架、视图翻转动画、主视图UI和代码、主视图控制器代码、背后视图UI和代码、背后视图控制器,这样的顺序编写和讲解。<br> 3.3.1 构建应用骨架<br> 在本书采用Xcode3.2工具中提供了一个编写实用型应用程序的模板,图3-11是Xcode3.2的模板,其中Utilit
<span style="font-size:24px"><strong><span style="font-family:times">3.2 </span> <span style="font-family:黑体">应用剖析</span></strong></span><br><span style="font-family:宋体">这一节我们从应用的类图如入手,了解应用中有哪些类
<p><span style="font-size:16px">第3章 工具类应用开发实战--密码生成应用<br></span></p> <p><span style="font-size:16px">3.1 应用介绍</span></p> <span style="font-size:16px">密码生成(Amuck Password Generator)应用App
<p align="center">使用github管理Eclipse分布式项目开发</p> <p> </p> <p>老关我在前面的博文(github管理iOS分布式项目开发)中介绍了github管理iOS分布式开发,今天老关将向大家介绍使用github管理Eclipse分布式项目。事实上我们的516inc团队这在开发一个多移动平台项目,除了iOS平台还有Android和Window
<p align="center">使用github管理iOS分布式项目开发</p> <p> </p> <p>在我们iOS项目开发过程中, 我们的团队成员都是分散的、分布式,这个项目管理带来了挑战。Git是一个能够进行版本管理的软件,它是cvs和svn的未来。下面我根据我们的经验总结一些心得如下:</p> <p>1、创建github账户</p> <p>2、创建代码仓库</p> <
<p>使用subversion管理iOS源代码</p> <p> </p> <p>1、安装和配置subversion服务器</p> <p> </p> <p>在windows 服务器上安装VisualSVN-Server,下载地址http://www.visualsvn.com/server/download/。采用默认安装,安装完成创建一个服务器的代码仓库hello,如图所示。</p
Objective-C中的协议(Protocol)类似于常用的接口,协议(Protocols)中定义的方法,在类中实现。<br> @protocol MyFirstProtocol<br> - (void)myFirstProtocolMethod;<br> @end<br> 在iPhone OS中,协议(Protocol)通常用来实现委托对象(Delegate Object)。委
<p>微软官方提供的Window Phone 7 开发工具包是<a name="OLE_LINK2"></a><a name="OLE_LINK1">VisualStudio </a>2010 Express for Window Phone7 (学习版或快捷版),使用该版本有个问题是,不能打开传统的Visual Studio工程(如:WinForm、WebServer、WebForm等
<p><a href="http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&courseId=240566"><span style="font-size:24px;color:#FF0000;"><strong>iPhone与iPad开发实战——精通iOS开发</strong></span></a></p> <p>
<p>Objective-C数据类型可以分为:基本数据类型、对象类型和id类型。基本数据类型有:int、float、double和char类型。对象类型就是类或协议所声明的指针类型,例如:NSAutoreleasePool * pool,其中NSAutoreleasePool是一个类,NSAutoreleasePool *是它指针类型。id类型可以表示任何类型,一般只是表示对象类型,不表示