`
totoxian
  • 浏览: 1074002 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

iPhone开发初探

阅读更多

Author:孙东风 Date:07/19/2009

本文是作者从一无所知到入门的知识学习过程,并结合自己在嵌入式开发的经验所写的技术总结文章,以供后来者学习。

苹果公司的iphone平台采用Object-c做为native language的开发,Object-c的内核是C语言的,并基于C语言实现OOP的一些特性。Object-c是对C语言的扩展,这和C++的前身Better-c有很大的相似之处,Object-c的新版本里实现了和Java类似的垃圾回收机制,但基于iphone平台的资源限制,iphone平台并不支持垃圾回收机制。

学习一门语言,自然要从"词法分析"也即编译前端和"语法分析"也即编译后端来理解它。

在编译前端,Object-c给我们带来了很多不一样的特性。下面我们重点看看Object-c与众不同的词法定义。

1.Object-c使用.m后缀作为代码文件的扩展名,当然你也可以使用.c和.cpp后缀名,但它们会分别调用C compiler和C++ compiler。Xcode作为iphone开发的集成环境,使用GCC作为编译器。

2.Object-c使用#import代替#include来导入声明文件。并且编译器保证#import不会被重复导入。

3.尽管Object-c也支持printf()进行控制台打印文本信息,但是更推荐使用NSLog(),并且它会自动在文本后面添加'\n'。

4.Object-c曾经也叫做NextStep,为了更好的体现其OOP的特性,NextStep里所有的对象都继承自NSObject,这点和Java的单根继承很类似。所以其Applicatio Kit里的类库前缀基本都是NS*。而其Cocoa Foundation里的类库前缀基本都为NSCF*。

5.Object-c提供了BOOL类型,但这个BOOL类型和C++里的并不一样,在C++里一切非0值的东西都为true,而为0值的为false。但是Object-c里1为true并被宏定义为YES,0为false并被宏定义为NO。

所以,如果读者写下面的代码,肯定是错误的:

BOOL areIntsDifferent_faulty(int thing1,int thing2)

{

return (thing1-thing2);

}

if(areIntsDifferent_faulty(23,5) == YES)

{

}

因为areIntsDifferent_faulty方法返回的是两个整数的差,如果这个差不为1,那么永远不会为YES。

6.Object-c里仍然继承了C语言的传统,其primitive type只有int、char、float、BOOL并用它们表达一切。

7.Object-c采用@interface来进行接口的声明,并采用@implementation对声明进行实现。

8.Object-c在Foundation Kit里提供了很多基础类库,常用的如NSString、NSRange、NSLog、NSPoint、NSRect等,这点和Symbian里提供的绘制接口很类似。

9.Object-c也支持Collection类库,并充分借鉴了Java Collection的设计,比如NSArray、NSMutableArray等。这些类库提供基本的插入、删除、排序操作,需要注意的是NSMutableArray才提供上述操作,而NSArray为不可修改的,这有点类似于Java的String和StringBuffer,而iphone里也提供了NSString和NSMutableString!

10.Object-c里采用跌代器的概念进行元素的遍历,NSEnumerator的典型用法如下:

NSEnumerator* enumerator;

enumerator = [array objectEnumerator];

id thingie;

while(thingie = [enumerator nextObject])

{

NSLog(@"I found %@",thingie);

}

在编译后端,Object-c同样实现了OOP编程的特性:继承、多态、封装。下面逐一介绍。

1.继承

典型的继承用法如下:

@interface Circle : NSObject

{

ShapeColor fillColor;

ShapeRect bounds;

}

-(void) setFillColor: (ShapeColor)fillColor;

-(void) setBounds: (ShapeRect)bounds;

-(void) draw;

@end //Circle

@interface Rectangle: NSObject

{

ShapeColor fillColor;

ShapeRect bounds;

}

-(void) setFillColor: (ShapeColor)fillColor;

-(void) setBounds: (ShapeRect)bounds;

-(void) draw;

@end //Rectangle

上述两个类Circle、Rectangle的属性和行为非常类似,所以我们可以通过封装、继承的方法进行代码构造。如下:

@interface Shape: NSObject

{

ShapeColor fillColor;

ShapeRect bounds;

}

@implementation Shape

-(void) setFillColor:(ShapeColor)c

{

fillColor = c;

}

-(void) setBounds:(ShapeRect)b

{

bounds = b;

}

-(void)draw

{

}

@end //Shape

下面分别利用继承实现Circle和Rectangle,如下:

@interface Circle:Shape

@end //Circle

@interface Rectangle:Shape

@end //Rectangle

@implementation Circle

-(void) draw

{

NSLog(@"drawing a circle");

}

@end //Circle

@implementation Rectangle

-(void) draw

{

NSLog(@"drawing a rectangle");

}

@end //Rectangle

2.多态

Object-c利用[super Init]之类的语法调用父类的方法,每个类都有一个指向自己的self指针,这点和C++的隐含this指针是类似的。

Object-c并不支持多继承,因为多继承的开销过大,需要解决虚基类的问题。在大多数的嵌入式平台,比如Symbian上也不支持多继承。

3.内存管理

Object-c在内存管理上也采用大多数编译器所采用的reference counting技术,亦即编译器为每个对象维护一个引用计数,在这个引用计数为0时释放对象所占用的资源。

int main(int argc,const char* argv[])

{

RetainTracker *tracker = [RetainTracker new];

[tracker release];

return (0);

}

总结一下,iphone上的开发还是比Symbian简单的,因为apple公司毕竟是软件开发的专业公司,一些开发工具,比如Xcode远远比Symbian的Carbide.c++要好用。

-(void) setFillColor: (ShapeColor)fillColor;

-(void) setBounds: (ShapeRect)bounds;

-(void) draw;

@end // Shape

分享到:
评论

相关推荐

    iphone开发初探

    在iPhone开发中,首要了解的是苹果公司选择Objective-C作为其原生开发语言。Objective-C是在C语言的基础上扩展的,增加了面向对象编程(OOP)的功能。它的核心仍然是C语言,但具备了像Java一样的垃圾回收机制,不过...

    CatJump小游戏

    《CatJump小游戏——cocos2d-iphone开发初探》 在移动游戏开发领域,Cocos2d-iPhone是一款广泛使用的开源游戏引擎,它为开发者提供了丰富的功能和强大的性能,使得构建2D游戏变得轻松易行。本篇将围绕"Cocos2d-...

    基于Android的校园失物招领与兼职查询软件调研与开发初探.pdf

    移动客户端应用发展迅速,自2007年iPhone问世以来,移动设备功能不断增强,用户界面和硬件技术迅速提升。Android设备每天有150万台被激活,其广告市场占据相当份额,用户使用设备的时间延长,能够运行的应用数量增多...

    跨平台开发:初探PhoneGap移动开发框架

    随着Google的Android手机和苹果的iPhone手机的逐渐普及,越来越多开发者加入到移动应用开发的大军当中。目前移动终端中的冠亚军Android,应用是基于Java语言基础上进行开发的;而苹果公司的iPhone则是基于C语言开发...

    ios开发纯代码实现autolayout和sizeclasses初探

    在iOS应用开发中,AutoLayout和Size Classes是两种强大的界面布局技术,它们使得开发者能够创建适应不同屏幕尺寸和设备方向的用户界面。本篇文章将深入探讨如何在不使用Storyboard或Interface Builder的情况下,纯...

    TitleGame 简单的iphone游戏代码

    《TitleGame:初探iPhone上的二维游戏开发》 在移动设备上开发游戏,尤其是对于新手开发者来说,是一个既富有挑战性又充满乐趣的过程。本文将深入解析“TitleGame”,一个专为iPhone设计的简单二维游戏,它是一个...

    移动开发者必备工具:开源jqTouch初探

    《移动开发者必备工具:开源jqTouch初探》 在当今技术日新月异的时代,移动设备的普及催生了大量针对这些平台的应用程序开发需求。尤其是苹果的iPhone、iTouch和iPad,它们引领了移动设备的新潮流。然而,苹果官方...

    在IPhone上用Cocos2d做的一个小游戏

    《使用Cocos2d开发iPhone游戏的初探》 Cocos2d是一款广泛应用于iOS平台上的2D游戏开发引擎,以其高效、易用的特点深受开发者喜爱。本项目以"Hello World"为例,展示了如何在iPhone上利用Cocos2d创建一个简单的小...

    PumpkinFace

    《PumpkinFace:苹果iOS应用开发初探》 在当今移动互联网的浪潮中,iPhone应用程序的开发无疑占据了重要的地位。"PumpkinFace",这个项目标题,为我们提供了一个深入学习iOS应用开发的契机。这是一份源代码,特别为...

    HelloPoly.zip

    《HelloPoly.zip——初探iPhone应用开发》 在当今移动设备普及的时代,iPhone应用程序开发成为了一个热门话题。本文将基于“HelloPoly.zip”这个压缩包,深入探讨如何入门iPhone应用开发,以及它所涵盖的基本概念和...

    Android Applications (1) Introduction to the Development.pdf

    ### Android应用开发初探——基于S3C6410平台 #### 一、引言 随着移动互联网的快速发展,Android作为最受欢迎的操作系统之一,在全球范围内拥有庞大的用户基础。对于开发者而言,掌握Android应用程序开发的基本原理...

    电脑报2008合订本电子版

    因此,《电脑报2008合订本电子版》中可能包含了大量的关于Vista优化、多核处理器选择、互联网新应用介绍、智能手机初探等相关文章。这些内容不仅反映了当时的科技趋势,也为后来的技术发展提供了历史参考。 在合订...

Global site tag (gtag.js) - Google Analytics