浅谈iOS程序开发ObjectiveC及Xcode4-完整版_第1页
浅谈iOS程序开发ObjectiveC及Xcode4-完整版_第2页
浅谈iOS程序开发ObjectiveC及Xcode4-完整版_第3页
浅谈iOS程序开发ObjectiveC及Xcode4-完整版_第4页
浅谈iOS程序开发ObjectiveC及Xcode4-完整版_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

iOS程序开发Objective-C及Xcode4摘 要iOS是由苹果公司开发的操作系统,它主要是给iPhone、iPod touch以及iPad使用。iOS的系统架构分为四个层次:核心操作系统层(the Core OS layer),核心服务层(the Core Services layer),媒体层(the Media layer),可轻触层(the Cocoa Touch layer)。应用程序由Objective-C语言开发,可控元件有GPS模块、光线传感器、加速度传感器、地磁感应器、电子罗盘包括一些多媒体设备等。关键词:ios系统 Objective-C Xcode4随着电子科技的发展,装载有ios系统的智能终端成为市场的宠儿,ios系统的应用软件市场需求量越来越大,相应的APPStore的应用程序超过42万个,覆盖了书籍类、游戏类、其他娱乐、教育、生活方式等多个领域。现有的ios应用程序远不能满足人们的要求,基于IOS的接口适配器模块及程序开发可以为原终端提供扩展,可以实现智能终端对硬件外设的操控,扩大应用范围,是人类生活更方便。这篇文章我根据Apple Dev Center的技术资料,加上自己的理解总结而成的文章。之前看过iPhone OS的getting started系列文章的第一篇文章,应该总结一下。iPhone OS由两部分组成:操作系统和支持iPhone和iPod touch设备上运行原生程序的技术集。iPhone OS继承自Mac OS X,而且很多底层技术是共享的,但是iPhone OS是为移动设备而设计,有些技术是在iPhone OS上独有的,比如多触点技术。运行在内核之上,iPhone OS可以分成四层。如图:Core Service层和Core OS层负责和内核打交道(自己的理解),这两层是基于C语言的。提供底层接口支持,包括网络套接字、POSIX线程、文件的访问等等。Media 层支持音频、视频及2D/3D绘图等多媒体相关服务。包含的技术有基于C语言的OpenGL ES等。同时这层还包含基于Object-C语言的动画引擎,使用动画的相关服务,应该就用到这层的服务。Cocoa Touch层是最常用到的服务层,可以使用这层提供的框架来进行程序开发,UIKit框架是图形界面程序的框架,利用它可以创建类似的应用。开始学习 iPhone OS的编程技术是,应该先从这一层提供的框架开始学习,当掌握之后,在学习底层的接口和编程技术。iPhone OS的事件处理模型是一个里程碑,引入了触摸事件,这里说的触摸事件和传统的触摸事件有很大不同。传统的触摸事件只支持一个点的事件,但是iPhone OS的触摸事件支持多点的触摸事件,所以事件的处理模型是一个非常大的技术创新。以上对ios有了一些大概的了解,接下去讲讲它的开发工具Objective-C及Xcode4 。1、Objective-C的介绍及应用Objective-C是非常“实际”的语言。它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。ObjC写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep),Apple在其Mac OS X10.3中仍未引入这个功能。不过令人欣慰的是在Apple发布的xCode4中已经支持自动释放啦,我不敢冒昧地说那是垃圾回收,因为两者机制不同,在xCode4中的自动释放,也就是ARC(Automatic Reference Counting)机制,是不需要用户手动去Release一个对象,而是在编译期间,编译器会自动帮你添加那些以前你经常写的NSObject release。另一个问题是ObjC不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类别和函式均有“NS”作为前缀,例如NSObject或NSButton来清楚分别它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。虽然Objective-C是C的母集,但它也不视C的基本型别为第一级的对象。和C+不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C+不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。由于Obj-C使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用(syscalls)也如此),很多常见的编译时性能优化方法都不能应用于Obj-C(例如:内联函数、常数传播、交互式优化、纯量取代与聚集等)。这使得Obj-C性能劣于类似的对象抽象语言(如C+)。不过Obj-C拥护者认为既然Obj-C运行时消耗较大,Obj-C本来就不应应用于C+或Java常见的底层抽象。接下去主要介绍Objective-C的基本语法,传统的面向对象语言的封装,继承以及多态在Objective-C上会是什么样子。适合于熟悉面向对象编程的读者。Objective-C是基于标准的ANSI C的一门面向对象语言。其语法和设计主要基于Smalltalk,所以有些类似,而且支持标准的C语言语法。代码文件的类型有三种:.h头文件,.mC代码,.mmC+代码。定义了一种新的调用头文件的方法#import,这样不会重复#include头文件,只在没有调用过的时候调用一次,类似于PHP的require_once。最常用的数据类型:字符串NSStringObjective-C将字符串数据类型定义成为Class,支持可变长度的字符串,支持Unicode等等一些实用的方法。通过使用标志符,可以方便的由字符串常量定义NSString对象。下面给出一些定义NSString的代码实例。NSString *string1 = const string;NSString *string2 = NSString stringWithFormat:%d %d %s, 1, 2, hello string;类(Class)作为面向对象语言最基本也是最重要的数据类型,Objective-C当然不会不支持。Objective-C定义类的特点在于先在.h头文件里定义接口,然后在.m代码文件里实现。关于.h头文件的具体的语法看下面的图更直接一点。关于.m代码文件的具体语法也请参考下面的图。 成都明阳教育西南地区首家ios培训基地,咨询电话址: 咨询QQ:1164393309注意一下initWithUserName()方法的返回值的数据类型为id,是不是感觉这个一般的语言有点区别。其实,这种数据类型类似于C+的指针。在Objective-C里面仍然叫做指针类型。Objective-C的对象的定义,可以支持强类型的实例,以及弱类型的实例的定义。简单的说,强类型就是定义该实例的时候必须指明类的名字,弱类型就是没有指明类的名字。下面给大家看看实际的代码就会明白,定义这两者的时候的区别。MYHelloWorld *myHelloWorld1;/ 强类型(Strong typing)idmyHelloWorld2;/ 弱类型(Weak typing)弱类型能给实现设计模式(Design Patterns)的时候带来很大的方便。方法(Methods)方法Methods又可称为函数。在Objective-C里的类可以定义两种方法。一种是实例的方法,一种是类的方法。实例的方法局限于某个类的实例,也就是必须定义这个类的实例之后,才能被调用执行的方法。类的方法不需要创建实例,直接通过类的名称就可以被调用执行的方法。定义一个方法需要:方法名(一个或者多个关键字),返回值类型,参数类型和参数名。下面这的图详细的说明了如何定义一个实例的方法,其中负号-表示该方法为实例的方法,该方法的名称加上各个关键字包括冒号即为insertValue:atIndex:。Objective-C调用方法是通过发送消息给对应的实例对象。发送消息的方式其实是和一般的编程语言一样就是调用实例对象的方法,Objective-C独特的地方就是方法的调用是通过一个方法名零个或多个标示符零个或多个参数,然而一般的编程语言只需要一个方法名零个或多个参数就可以了。Objective-C里面之所以把调用方法称为发送消息,大概是因为所有的消息发送之后都是动态传递给实例对象的。并且,如果一个子类定义了一个和父类相同方法名标示符的方法之后,子类会先收到该消息,然后选择性的是否继续将该消息传递给父类。发送消息是通过一对方括号来实现的。在括号的里面,实例对象在左边,消息以及参数等的定义在右边。例如:anObject insertValue:anObj atIndex:1;为了避免生成多余的临时变量,Objecttive-C容许直接使用消息的结果。如下例:anObject getArray insertValue:anObject getValueToInsert atIndex:0;类的方法,类似于静态方法(Static Function),常用于作为工厂模式中用来生成新的实例。定义的时候和实例的方法有区别的地方就是开头的符号为加号+。调用的类的方法和调用(Static Function)基本相同,直接通过类名就可以,如下例:NSMutableArray* myArray = nil; / nil等同于通常的NULL/ 创建一个动态数组,并且制定最初的大小myArray = NSMutableArray arrayWithCapacity:19;属性属性是一个可以取代方法的方便符号。在类中声明定义属性时,并不创建新的实例,就是一个能够方便快捷的用来访问实际已经存在的变量的方法。也就是说,属性其实并没有真正的存储任何数据。其实属性是可以让你在编写代码时减少影响效率的冗余代码。简单的说属性要比getter和setter方法快。属性还可以定义一些访问该属性时的限制或者如何获取该属性,例如指定copy用来复制该属性,readonly用来指定该属性只读。property BOOL workFlag;property (copy) NSString* oString; / 通过复制来使用该属性.property (readonly) UIView* oView; / 定义一个类似于getter的属性.调用某实例的属性有两种方法,一种是通过括号,和调用方法类似,另外一种是通过点符号.。第二方法比较方便,也符合大多数开发人员的习惯。/ 第一种调用方法 myObject setFlag:YES; CGRect viewFrame = myObject rootView frame; / 第二种调用方法 myObject.flag = YES; CGRect viewFrame = myObject.rootView.frame;协议和委托(Protocols and Delegates)Objective-C中的协议(Protocol)类似于常用的接口,协议(Protocols)中定义的方法,在类中实现。protocol MyFirstProtocol - (void)myFirstProtocolMethod;end在iPhone OS中,协议(Protocol)通常用来实现委托对象(Delegate Object)。委托对象(Delegate Object)一般用来自己定义行为或者动作,也就是调用自己定义方法,但自己不实现该方法,委托其它的类来实现该方法。UIApplication类就是一个典型的例子。UIApplication类中定义了一个应用程序应有的行为或者动作。而不是强制让你的UIApplication子类去接受当前应用程序的状态消息并做出相应处理。UIApplication类通过调用特殊的方法,来传递这些消息给它的委托对象。这个委托对象通过实现名为UIApplicationDelegate的协议(Protocol),之后就可以接受到当前应用程序的状态消息并做出相应处理。比如内存不够的错误,应用程序被中断等重要消息。下面给出一段关于HelloWorld的实例代码:/main.m#import int main(int argc, char *argv) NSAutoreleasePool * pool = NSAutoreleasePool alloc init; int retVal = UIApplicationMain(argc, argv, nil, nil); pool release; return retVal;h)在Cocoa文本域常用的快捷键:使用如下的快捷键我们就可以在小范围呢移动光标二不让手不离开键盘了。controlF : 在同一行上将光标向右移动controlB : 在同一行上将光标向左移动controlP : 将光标移动到前一行controlN : 将光标移动到后一行controlA : 将光标移动到本行的行首controlN : 将光标移动到本行的行尾controlT : 将光标两边的字符对调controlD : 删除光标右边的字符controlk : 删除光标所在行光标后面的代码,便于你重写行尾代码control + L :将光标插点置于窗口正中。视频教程下载地址:(资源下载)2、Xcode4的介绍以及使用Xcode是一个款强大的IDE开发环境,就像你在写Windows程序时需要VS2005一样需要要Xcode为你写Mac程序提供环境。因此,如果你要成为Mac 程序的开发者,灵活运用Xcode工具是你必须做的第一步。1)我们写程序时常常在源文件的头部添加copyright声明以及公司名称等等;而Xcode在创建文件时已经帮我们做了绝大部分工作,我们可能需要修改一下公司名称,因为xcode给不知道我们公司名称,它不可能预知一切,所以需要我们自己通过设置来告诉它。那么我们如何做到这一点呢?因为xcode中没有有关公司名称的占位符,所以我们必须通过terminal使用命令来设置。在使用这个命令之前我们来看看xcode为我们提供的默认文件头部注释:/ untitled.m/ FilesOrganize/ Created by yan li on 8/29/09./ Copyright 2009 _MyCompanyName_. All rights reserved./在terminal中执行如下命令(打开terminal的热键是command+shift+U):yan-lis-macbook-pro: yanli$ defaults write com.apple.XcodePBXCustomTemplateMacroDefinitions ORGANIZATIONNAME = LiYanzhong;注意上面的命令是在terminal命令行的同一行,而不是两行,这里是因为命令太长所导致。注意该命令执行时不会发出任何提示,即使你在命令中写错了参数名执行后也不会有任何提示,所以如果你执行该命令后发现你期待的效果没有出现,就请你检查一下你是否有拼写错误,执行该命令后我们重新启动xcode并重新创建文件,这个时候创建的文件头部注释,如下所见:/* untitled.h* Untitled* Created by yan li on 8/29/09.* Copyright 2009LiYanzhong. All rights reserved.*/2)使用编辑器的技巧 a)如何关闭Xcode界面上的浏览器窗口? 点击在Xcode工具栏上的最右边个Editor图标,可以打开或关闭Xcode中查找项目文件的浏览器。快捷键是command+shift+E。 b)如何对代码进行首行缩进? 第一种方法:选中需要缩进的代码,按住control键后单击光标,出现pop菜单,然后选择Re-indent selection。 第二种方法:选择需要调整的代码,同时按下command(左移动代码)或 command(右移动代 码)。c)代码自动完成功能的强大应用在Xcode中写代码,Xcode编辑器常常给出提示,如果给出的代码提示符合我们的要求,我们就可以按tab键选择所提示的代码。如果提示代码不符合我们要求,我们可以按下esc键,将整个提示列表显示出来,找到我们需要的。在列表成员的最左边有个小方框,如果里面是f则对应的成员是函数;如果是m则是方法;如果是则是define命令;如果是E则是枚举;如果上C表示类。如果我们不希望显示提示列表也能在列表成员间选择,我们可以使用快捷键control. 在选项之间循环;也可以使用shiftcontrol.在选项间反向循环。我们可以通过“代码自动完成功能”来查询一个类所提供了哪些API(接口方法)。方法是将类写在方法调用表达式中实现这一查询功能:NSDictionary+空格,然后按下esc键,将出现NSDictionary中提供的方法列表。注意:NSDictonary后面必须要有空格,提示编译器类名称已经写完接下来要输入的是消息(即类中的方法名)。将光标从一个占位符跳到下一个占位符的快捷键是:control + /d)在修改一个项目的代码时,请先拍下快照。File-Make Snapshot 拍下项目的快照; File-Snapshots 从快照中恢复。对应的快捷键:controlcommandS; 恢复没有快捷键这样的好处就是当代码修改烂了,可以恢复到最处状态。由此可见,这个功能只是在我们修改代码时提供帮助,不能真正的替代我们手动修改代码。e)查找替换功能的使用:Edit-Find-Find in Projects.出现如下对话框:在Find栏输入要查找的字符;在Replace栏中输入要替换查找到的字符的字符;我们选择在工程中查找。如果我们不选择Ignore case 则替换只发生在main()函数中。该方法修改代码有很到的弊端如果我只想修改某个函数内的car字符,但是这样修改会将函数外的所有我不许修改的car字符也改了;二是它不能修改类名和文件名;所以需要下面的方法来弥补它的第一不足。f)该方法可以解决上面修改代码的第一个缺陷,可以将代码的修改控制在一个函数之内,但是它仍然不能修改类和文件名字。使用这个方法前,必须用光标选择一个需要修改的局部变量字符或函数参数,注意必须是字符,如果你选择的是类名字符则不会出现菜单项“ Edit all in Scope.Edit-Edit all in Scope,然后在你输入的时候,所有出现该字符的地方一起被输入的字符替换掉。g)下面讲解一种可以修改类名和文件名的方法。是用该方法可以改变类名字和文件名;先选择一个需要被修改的类名,如Engine;将光标插了到该字符中,选择Edit-Refactor.打开如下的对话框:你如果需要将Car修也可以。按下 preview按钮,界面如下所见,Xcode自动给处了我们分析报告,有什么文件将被修改,每个文件有几处会被修改等信息。从下面图可以看到,类名以及类的文件名都被修改了。i)如何在Xcode中搜索一个文件?在一个源文件如何打开一个由#import导入的头文件呢?选中该头文件(可以不包含.h),然后通过File-Open Quickly.打开该被选中的文件。在没有选中任何文本时,选择Open Quickly.则打开一个简单的查询窗口,查找工程中的文件。快捷键commandshiftD如果你当前在看一个.m文件,这个时候你突然想要看看与该文件对应的.h文件,我们可以使用command + option+向上箭头 组合键,打开配套文件。j)Xcode中书签的使用如果你要将代码中的某个部分标注起来,以便以后和方便的找它这部分代码,则我们可以使用书签。选中一段文本或在源文件中放入插入点,然后选择Edit-Add to Bookmarks(快捷键command + D),出现提示时输入书签名。k)代码编辑器的导航条导航条就是在本文编辑窗口的顶部。导航条上有个功能菜单,我们可以通过#pragma mark命令向功能菜单上添加项。#pragma指令将objective-c将常规代码之外的信息或说明传递给编译器和代码器。通常,#pragma是被忽略,如果你的编译器不认识它就会忽略它,不会报考警告。除了通过#pragma mark向功能菜单添加项;在注释中以如下关键字符打头的文本都会被添加到功能菜单:MARK:TODO:FIXME:L)通过研究助手(Research Assistant)获取Xcode的文档和参考资料。可以通过Help-Show Research Assistant 打开研究助手;一旦研究助手的浮动窗口被打开后,浮动窗口中的内容会随着你与Xcode交互操作的内容改变而改变。如下图所示:在Tire.m文件中,当光标在NSString类上时,研究助手浮动窗口所显示的信息:切换到文件Tire.h中,研究助手的浮动窗口就显示有关NSObject的信息:M)文档管理程序我们可以通过访问苹果公司的官方API文档;方法是按住Option键并双击某个要查看的符号。如我们按住Option键并双击NSString符号将在文档浏览器窗口中打开有关NSString的资料信息,如下图:按住control键并单击文档区域来打开pop菜单,选择任何菜单项,在另一个窗口中打开该文档。M)如何调试程序?(a)有两种方法:一是暴力调试,二是使用调试器调试。什么是暴力调试?暴力调试就是在你的程序中添加NSLog()语言,将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论