Daily Archives: 2013 年 5 月 26 日

iOS 7大量设计细节:黑色、白色,各种扁平设计

460

苹果将在下个月10号举行的WWDC 2013上推出下一代iOS和OS X,苹果iPhone、iPad和iPod touch将迎来界面大改的iOS 7。今天,据消息人士又给出了下一代iOS操作系统的设计细节。

苹果工业设计主管Jony Ive现在负责苹果人性化界面(Human Interface)部门,消息称iOS 7界面将会发生重大改变,而Jony Ive就是iOS 7界面大改的负责人,iOS 7的整体将会发生改变,而不只是新增几个无关痛痒的小功能。今天,消息人士称iOS 7将使用黑色、白色和各种扁平设计,这意味着iOS中各种仿实物纹理将会消失,黑色和白色将成为主要界面元素。在过去几个月中,苹果已经重新构建iOS 7新界面很多次了,所以直到iOS 7发布,所有的界面元素都还是有可能发生变化的。

Jony Ive对各种“仿实物纹理”的看法

在苹果内部软件设计会议上,Ive以及人性化界面副总裁Greg Chrisie与苹果iOS设计师们分享了为什么要移除各种仿实物纹理的界面。我们都知道苹果联合创始人乔布斯和已经离开苹果的iOS前主管Scott Forstall都非常喜欢仿实物纹理的界面设计。

Ive声明仿实物纹理的软件设计并不能接受得起时间的考验,此外,Ive还分享说iOS目前的应用有很多不同的设计,这样苹果用户们会感到非常混乱。比如 说,采用黄色便签本设计的备忘录应用与使用银色纹理的地图应用反差很大,再比如说使用赌场纹理设计的Game Center应用与采用蓝色和白色设计的邮件应用又会对用户造成很大的混乱。
screen-shot-2013-05-21-at-8-53-13-pm.jpg

不过,目前iOS设备销量已经达到了5亿台,乔布斯和Forstall喜欢的仿实物设计已经成为iOS的代名词。Ive想要让苹果的软件和系统都使用干 净、无缝的设计,这样才能与铝材质和玻璃打造的设备匹配,这样做的挑战非常大,与此同时,软件的操作和界面还需要简单,这样才能让消费者产生共鸣。

Ive并不是简简单单的修改修改iOS 7的部分设计,而是将新设计理念应用到iOS 7系统的所有部分。根据消息人士的描述,iOS 7改变如此之大,只有极其精华的部分才被保留了下来。

iPhone锁屏界面大变样
screen-shot-2013-05-23-at-9-40-16-am.jpg

乔布斯在2007年1月发布了改变整个手机行业的iPhone,当时很多人都对乔布斯演示的滑动来解锁的操作非常喜欢,自从那天开始,iPhone的锁屏界面就没有什么大改变,一直保持原样。

iOS 7中,苹果可能会去除反光、透明的时间条,并且采用简约、黑色的用户界面。此外,输入PIN码的正方形各自也会被圆形、黑色,有着白色边框的白色文字按键 替代,最后,消息人士称锁屏界面的通知消息也会有增强,用户可以通过手势执行各种操作。总的来说,iOS 7中锁屏界面与之前用户习惯的有很大区别,只不过功能上差不太多。

通知系统

notifictations.jpg

Jony Ive要求iOS设计团队使用扁平的黑色和白色替代iOS系统中各种麻布和皮革质感的纹理,比如说iPad日历应用使用的皮革纹理。比如说,苹果iOS通 知中心的下拉面板目前采用的黑色麻布纹理的背景设计,在iOS 7中,通知中心背景的设计将变成深灰/黑色,文字将变成白色。

最新的iOS 7中通知中心使用了全新的面板,用户可以更迅速的获得信息。比如,除了天气和股票信息外,苹果正在测试为通知中心加入更多组件,消息人士称iOS 7通知中心可能加入本地新闻源等。此外苹果还在测试WiFi、飞行模式和蓝牙的快速开关。

主屏
screen-shot-2013-05-23-at-12-40-42-pm.jpg

iOS 7的主屏设计大部分还会采用相同的设计,也就是由各种iOS应用图标构成。不过主屏应用图标将会去除反光、阴影和光泽效果,按键仍然是圆角矩形。就像之前 报道中提到的那样,iOS 7中所有预装的应用都会采用扁平、去除实物纹理的设计。相机、照片应用的图标都会很扁平,Game Center图标设计中绿草地和象棋板。

iOS 7中还有全景壁纸,也就是当用户在主屏中切换时后面的壁纸会发生变化。这个功能可能是对苹果去年为iOS 6加入全景拍照模式的回应。这里需要提到的是谷歌Android系统中很多年前就已经支持全景壁纸了。

最后,iOS 7中导航和标签栏都已经被全新设计,去除了渐变纹理。iOS 7中的某些导航栏可能包含轻微的模糊效果。在某些应用中,状态栏没有iOS 6中那么透明。iOS 7系统内置的键盘与之前版本的设计相差不多,不过灰色更浅一些,而且没有阴影。
全新设计的App除了,主屏的按键,苹果大多数的应用已经被重新设计来与黑色、白色和扁平的系统主题相搭配。比如说,Passbook删除某个优惠券时出现的碎纸机效果可能会被移除。

此外,iPhone备忘录应用将会使用扁平的白色的设计替代黄色的便签本设计。邮件、日历和地图应用都获得了统一的外观设计,大量采用扁平的白色纹理。这 些应用的核心元素都会采用白色,每个应用会拥有独特的按键颜色。总得来说,就是所有的应用都采用白色作为基础,彩色作为主题。
screen-shot-2013-05-23-at-8-42-46-pm.jpg

比如说,日历应用可能会有红色的按键,信息应用有绿色的控制按键。虽然可能并不准确,不过上图中的iOS 7日历应用设计可能就能代表所谓的白色作为基础,红色作为主题这种理念了。当然,iOS 7日历用户界面的设计可能不会像概念图片中的这样激进。虽然邮件应用不会有太大的改变,App Store、报刊杂志、Game Center、Safari、相机和天气应用将会有很大的改变。
weather_app.jpg

苹果iOS 7中全新的天气应用据说会包含小幅动画的图片来显示下雨、晴天和下雪等天气变化。消息人士表示实际效果与上图中的概念设计有些神似。

Game Center肯定会有绿色的主题,而报刊杂志将会移除木质书架界面。木质纹理可能会被OS X Mountain Lion系统中Dock的设计样式替代。iPhone上Safari的界面也会改变,尤其是标签设计。

App Store、iTunes商店和iBookstore将会采用更扁的白色基调设计,目前这三个商店使用的黑色主题。此外,由于用户在寻找FaceTime 时很迷惑,所以iPhone将包含独立的FaceTime应用。之前版本的iOS系统中,FaceTime只能从iPhone电话应用中寻找。

全新功能

虽然iOS 7最大的改变是设计上的,不过这款操作系统将会包含很多新功能。之前有消息称,iOS 7会深度集成Flickr和Vimeo社交网络,还会改善地图和Siri对车在娱乐系统的支持。虽然全新的用户界面对于消费者来说是很大的改变,消息人士 最后称iOS 7也会有很多针对开发者的改变,让他们为iOS开发App更简单、更舒心。
优先性

根据对iOS 7开发熟悉的人爆料,苹果设计师和工程师们优先开发iPhone版iOS,而不是iPad版iOS。

发布时间

苹果很有可能在今年秋季发布新硬件时推出iOS 7正式版。苹果会在今年秋季发布外观与iPhone 5相似的iPhone 5S,这款设备将搭载更快的处理器、质量更高的摄像头,有可能配备指纹识别器。此外,苹果还有可能在今年秋季发布新款iPad和iPad mini。新款iPad将采用超薄窄边框设计,而iPad mini可能会配备Retina显示屏。

iOS开发入门教程

摘要: iOS开发入门教程,从创建项目到运行项目,包括OC基础,调试,模拟器设置等相关知识。

程序发轻狂,代码阑珊,苹果开发安卓狂!——写给狂热的编程爱好者们

本文概览

写在前面的话

学习iOS应用程序开发已有一段时间,最近稍微闲下来了,正好也想记录一下前阶段的整个学习过程。索性就从最基础的开始,一步一步记录一个最简单的iOS应用从创建到运行的全过程,其中会穿插很多相关知识或是遇到过的问题。其实算不上教程,但希望能够帮助更多的开发爱好者更快、更好的入门。

iOS开发环境简述

最友好,最现实,也是最方便的开发环境就是在Mac系统中安装Xcode进行开发。原因在于:第一,开发工具(Xcode)限制。苹果官方只提供Mac版的Xcode,而Xcode内置了Xcode IDE,性能分析工具,iOS SDK,iOS模拟器和最新的OS X,可以方便迅速的进行代码编辑以及应用调试,可谓是Mac和iOS开发工具的不二选择。第二,代码提示和自动补全。iOS开发中用到的类或方法的名称,为了更具语义化,让开发者一目了然,通常会比较长,这往往会让刚刚接触iOS开发的开发者为了记住这些方法而伤透脑经。而Xcode拥有优于其他编辑器的OC代码提示和自动补全功能,这将很大程度降低开发入门的门槛,这决定你开发iOS应用没有理由不使用Xcode。因此,使用非苹果电脑的开发者们最好安装Mac OS X的虚拟机,进行开发学习,否则你不仅会比别人花上多出一倍甚至更多的时间去搭建开发环境,而且代码编写上也会比使用Xcode开发的人花上更多的精力。

第一步,创建项目

1.1 新建iOS项目

打开Xcode,如果是首次打开Xcode,你将会看到一个欢迎界面,如图:

Welcome to Xcode

你可以直接在该界面中点击图中1处标记的Create a new Xcode project来创建一个项目,也可以点击图中2处标记的按钮来打开电脑中已经存在的Xcode项目。你还可以修改3处标记的复选框状态设置下次启动Xcode是否显示该欢迎界面。

本文不演示在此点击1处所示创建项目,首先点击该界面左上角的红色按钮退出该欢迎界面,然后点击屏幕左上角的File->New->Project。截图如下:

新建项目

接下来你将看到如下界面:

选择应用模板

首先进行系统筛选,iOS应用则选择iOS列表对应项,OS X应用则选择OS X列表对应项。本例为iOS应用,故在此选择iOS中的Application(图中左上角红框所示),然后选择应用模板选择,在界面右边列出了多种最常用的应用模板类型,开发者按照自己的应用需求可自行选择,本例选择Single View Application(图中右上角红框所示)。做完以上选择后点击窗口右下角Next按钮,进入下一个设置窗口:

应用基础信息设置

此处内容会根据个人情况而不同,故不做赘述,按照窗口提示,填写相关信息即可。注意窗口下方的三个复选框,其功能分别是使用storyboards使用自动引用计数器包含单元测试,根据个人情况勾选/取消即可。设置完成后点击右下角Next按钮,进入下一个窗口:

选择保存位置

按照窗口所示,选择项目存储位置后点击窗口右下角Create按钮,完成应用创建过程。

1.2 应用程序目录结构说明

项目创建完成之后,Xcode会进入项目开发界面,界面大致分为三部分,左侧项目及目录结构列表、中间为代码编辑区、右侧属性设置和控件列表等区域。下面是目录结构的截图:

项目目录结构

项目初始时包含如图所示三个主要目录,后续开发中开发者可以自行添加目录。其中:

  • FirstIosApp目录与项目名称同名,主要存放应用相关源代码和配置文件;
  • Framework存放项目使用到的框架,默认会添加图示三个必备框架;
  • Products用于存放生成的应用文件,开发中开发者一般不必关心。

1.3 应用程序初始结构概览

整个应用程序的入口文件默认为AppDelegate.m,应该可以通过配置文件修改(未尝试)。其内部结构如下:

应用程序入口结构

该文件包含应用程序生命周期中各个阶段可以调用的方法接口,以便应用程序在不同的状态阶段能进行相应的操作。这些方法就不一一说明了,开发者几乎可以望名知意。

1.3.1 iOS应用程序的生命周期

对于上面图示方法如果还有不解的地方,可以参考下图(来源于网络):

iOS生命周期

第二步 代码入门(数据类型)

做iOS开发,仅仅懂得使用Xcode,仅仅了解目录结构,仅仅了解生命周期,是远远不够的,这些只是基础中的基础。一定的编程能力也是必不可少的。下面就简单的介绍一下iOS开发的编程语言——Objective-C,后面简称OC。

学习一门语言,往往需要从最基础的数据类型开始(记得大学学习的时候老师就是这么干的),至于编程逻辑,奇技淫巧等则是在开发过程中慢慢积累的。好言归正传。

2.1 基础数据类型

OC是C语言的一个超类,因此OC拥有C或C++的几乎所有特性,当然它也有自己独具一格的地方。所以OC也支持C语言的数据类型,诸如int,float等也都可以在OC中使用。基础数据类型不是本文重点,在此就不多言辞了。

2.2 OC数据类型

OC不是仅仅只能使用C/C++的数据类型,它也拥有自己的数据类型,虽然与通常人们熟知的各种数据类型看起来有点怪异,但事实上OC的数据类型是个很好玩的东西,也不难理解。下面列举几个常见的OC数据类型。

2.1.1 NSNumber类和NSInterger

NSNumber是以对象的形式来包装基础数据类型,它提供一下方法:

1 + (NSNumber *) numberWithChar: (char) value;
2 + (NSNumber *) numberWithInt: (int) value;
3 + (NSNumber *) numberWithFloat: (float) value;
4 + (NSNumber *) numberWithBool: (BOOL) value;

例如,要从一个int数据初始化一个NSNumber可以这样写:

1 NSNumber *number = [NSNumber numberWithInt: 100];

而要从NSNumber实例得到NSInteger数据则可以如下操作:

1 NSInteger integer = [number intValue];
2.1.2 NSString类型

NSString是OC的字符串类。与普通字符串不同的是NSString的值需要在普通字符串前加上一个@符号。例如要初始化一个’I’m a string.’的OC字符串,我们需要这样做:

1 NSString *str = [NSString stringWithString: @"I'm a string."];

看起来很麻烦,很复杂的样子,不要担心,OC应该也考虑到了这一点,所以它也提供简写形式:

1 NSString *str = @"I'm a string.";

NSString类还提供了很多其他形式的创建字符串的方法(比如:stringWithFormat等),这里就不一一列举了,以后在开发中慢慢体会吧。

2.1.3 NSArray类型

NSArray是OC的数组类。OC的数组是很强大的,在一个数组中可以允许存在不同类型的数据,这个特性就跟强大的JavaScrit一样。初始化一个数组可以这样操作:

1 NSArray *arr = [NSArray arrayWithObjects:@"a", @"b", @1, nil];

当然也支持简化形式:

1 NSArray *arr = @[@"a", @"b", @1];

需要说明一点,使用arrayWithObjects方法创建数组的时候最后需要以nil结尾,而使用简化方式的时候不需要。

开发中可以使用以下两种形式获取数组对应索引位置(index)的值:

1 NSString *a = arr[index];
2 NSString *b = [arr objectAtIndex: index];

2.1.4 NSDictionary类型

NSDictionary是OC的字典类。字典类型在使用中以key-value键值对的形式存在。也支持多种初始化方式,下面列举两种:

1 NSDictionary *dic = [NSDictionary dictionaryWithObjects:@[@"a",@"b", @"c"] forKeys:@[@"first", @"second", @"third"]];
2 //或者使用下面的形式
3 NSDictionary *dic = @{@"first": @"a", @"second": @"b", @"third": @"c"};

取值方法跟NSArray大同小异:

1 NSString *a = [dic objectForKey: @"first"];
2 NSString *b = dic[@"second"];

2.1.5 NSDate类型

NSDate是OC的日期类。常见用法举例:

1 NSDate *date = [NSDate date]; //返回当前时间
2 NSDate *date = [[NSDate alloc] init]; //初始化为当前时间,类似date

第三步 OC类的认识(成员变量和方法)

iOS开发常常伴随着视图,而视图往往离不开视图控制器,在iOS开发中每一个视图控制器就是一个OC的类,因此学习iOS开发就必须了解OC的类。

OC的类使用@interface ClassName: superClass <protocol> … @end 结构来定义,NSObject是所有OC类的父类。与java相比OC的@interface 关键字就等同于JAVA的class关键字,OC的protocol就是JAVA中的interface,这一点很据迷惑力,大家在学习时需要特别注意。

3.1 类的声明

举例声明一个Person的类(视图控制器)并实现它,拥有nameage两个成员变量,自然需要定义getNamesetNamegetAgesetAge,下面我们看下这个过程。

首先,类的结构如下:

1 @interface Person: NSObject {
2     NSString *name;
3     int age;
4 }
5
6 @end

然后,我们声明它的setter和getter方法,用来设置和读取它的成员变量的值。按照传统方式应该如下定义:

01 @interface Person: NSObject {
02     NSString *name;
03     int age;
04 }
05
06 - (void) setName: (NSString *) newName;
07 - (NSString *) getName;
08
09 - (void) setAge: (int) newAge;
10 - (int) getAge;
11
12 @end

看,是不是很简单?然而,既然上面说了是传统方式,那么肯定OC还提供了更现代的方式:

1 @interface Person: NSObject {
2     NSString *name;
3     int age;
4 }
5
6 @property(nonatomic, strong) NSString *name;
7 @property(nonatomic, assign) int age;
8
9 @end

没错,你没看错,就这么简单,它的功能和上面的代码是一样的。补充一下,@property本身可以接受参数来指定变量的getter和setter方式,其参数可用值和具体功能如下:

1 nonatomic //声明变量只在单线程中工作
2 atomic //默认值,可能有多个线程会用到这个变量
3
4 copy //分配一个新的空间,把原地址的内容复制过来
5 assign //简单的传递指针
6 retain //传递指针后引用计数器(retainCount)会自加1
7
8 strong //强引用
9 weak //弱引用

声明就这样就完成了,下面我们看下它的具体实现,在OC中类的实现需要使用另外一个关键字@implementation,格式如下:

1 @implementation Person
2
3 @end

我们还是先看下传统方式声明getter和setter方法该如何实现:

01 @implementation Person
02
03 - (void) setName: (NSString *) newName {
04     self.name = newName;
05 }
06
07 - (NSString *) getName {
08     return self.name;
09 }
10
11 - (void) setAge: (int) newAge {
12     self.age = newAge;
13 }
14
15 - (int) getAge {
16     return self.age;
17 }
18
19 @end

看完传统实现方式,是不是很想一睹现代方式的风采?我们继续往下看:

1 @implementation Person
2
3 @synthesize name;
4 @synthesize age;
5 //或者直接下面一句
6 //@synthesize name,age;
7
8 @end

是不是很神奇?在新版的Xcode中,@synthesize是可以省略的,但是建议还是都写上。

3.2 “+”和“-”

仔细的读者应该已经发现在上面的传统方式中包含了一个神奇的符号“-”。这个是什么意思呢?首先我们需要说明一下,一个类可以拥有成员变量和方法,而方法可以包含类方法和实例方法。所谓类方法是可以使用类名直接调用的方法,而实例方法是需要该类的实例才可以调用的方法。而在OC中使用“+”表示该方法为类方法,而“-”很简单自然是表示实例方法了。

至于方法的声明和实现大致和传统方式声明getter和setter是一样的,这部分就不再重复了。

第四步 运行和调试

每一个应用的开发过程都是漫长的,而在这个过程中我们免不了需要不时的运行一下程序,看看当前的效果,检查一下代码是否存在异常或者错误。

4.1 iOS模拟器

4.1.1 选择设备

Xcode的强大不是吹出来的,在Xcode中内置了iOS模拟器,能够模拟几乎所有iOS真机的功能,因此开发者可以通过iOS模拟器测试正在开发中的应用程序,提高开发效率,减少错误,节省开发时间。在运行前选择与应用对应的模拟设备是必须的,否则可能导致运行结果出现意外的问题。

在Xcode的菜单栏下方提供了选择模拟器的地方,如图所示:

选择模拟器

选择好模拟器后点击左侧的Run按钮,就可以在指定的模拟器中启动应用了。第一次启动模拟器一般会比较慢,后面就好了。同样可以点击Run旁边的Stop按钮,停止模拟器中的当前应用。也许有些时候你想独立运行iOS模拟器,而不启动当前应用,这也是可以的,请看下图:

启动模拟器

也许相同的设备,但是却又多个尺寸,多个屏幕分辨率,例如:iPhone就有4、4S、5等。那怎么选择呢?别当心,有模拟器呢:

选择不同的分辨率

真是iOS模拟器在手,开发调试不用愁啊!

4.1.2 模拟器自定义设置

看完了上面的介绍,是不是感觉有一种马上动手的冲动?先别急,还有更高级的呢!大家知道,现在很多流行的iOS应用都有定位功能,那么在模拟器怎么测试定位呢?看看下图你就明白了:

设置模拟器经纬度

4.1.3 存储屏幕快照

开发应用程序通常都不是一步到位的,过程中可能会产生各种各样稀奇古怪的现象,也许是显示不正常,也许是出现意外的效果,也或者你想把你当前的显示效果分享给开发团队的其他成员,这个时候作为开发者,你也许想要记录出现的这些现象,比如:截图、录屏什么的。这些都是不错的方法,但是iOS模拟器拥有更加方便的方式,如图所示:

存储屏幕快照

4.2 程序调试

每一个开发者都不能保证他的程序是完美的,所以通常在我们运行程序的时候会出现很多奇怪的警告或者错误,有的可以一目了然,迎刃而解,有的却隐藏得很深,很难发现。这时候断点调试就直观重要了。

在代码编辑器的左边的行号区,鼠标在这个区域单击可以在对应行上添加/关闭(不是删除)断点。启动断点,当再次运行程序的时候,程序若执行到当前行,则会暂停在当前行上,开发者可以在控制台看到断点处记录的信息。大致如图:

断点调试

如图所示,在断点处我们可以在控制台看到变量date的当前值以及内存地址等信息,这样就可以通过这些信息判断程序运行到该处时是否正常,也可以这样查看一些其他信息。

4.3 NSLog

有些时候我们可能会遇到一些仅靠断点无法解决的问题,这时我们还可以借助NSLog进行调试。NSLog也用于在控制台输出信息。如图:

NSLog调试

好了,到此告一段了,希望能帮助大家。

谷歌与NASA联合购买D-Wave量子超级计算机

谷歌准备联合投资一个量子超级计算机实验室,就在其山景城园区旁边,探寻飞速处理的潜能,可以在处理某些任务时比我们普通的Intel处理器快上11000 倍。这台计算机将由D-Wave制造,立于NASA的艾姆斯研究中心(Ames Research Center),非盈利机构高校空间研究协会(Universities Space Research Association)将负责其运作,谷歌和其他相关企业则可共享访问这台D-Wave Two设备,据说此设备需耗资1000万美元。

当然这已经不是D-Wave首次提供量子技术了,D-Wave在2010年就第一次将量子超级计算机卖给了洛克希德马丁(Lockheed Martin)公司,之后2011年推了商用版本。

D-Wave的系统和传统生产超级计算机的方式有较大差异。通常制造商将一般的x86芯片拼凑起来,然后使用复杂的软件硬件令它们能够协同工作,一起处理问题。当然最近我们也看到了更为灵活的基于GPU加速的任务处理。

而D-Wave的量子计算方式,则引入了一种全新的芯片架构。D-Wave称之为Qubits(量子比特),每个芯片都有最多512个Qubits,他们负责从量子级别以0、1进行同时编码。Qubits使用耦合器连接,随后可编程磁存贮器用于引导任务的执行。最后的视频给出了Qubit的工作过程。

D-Wave表示,Quibits对偶的状态令量子计算相当迅速。通过检验所有的组合,最终的计算过程会比传统处理器快得多。这些对于谷歌这类有繁重处理器任务的企业而言将会非常适用。显然谷歌期望驾驭量子计算进行高阶的设备经验积累,并精确地模拟现实世界。这些可用于更为直观的搜索服务,将多项服务进行数据的整合,比如谷歌的Google Now服务。“我们期望这能帮助研究人员构建更高效的模型,从语音识别,到网页搜索等。”一名发言人如此说。

而对于NASA而言,艾姆斯团队会使用D-Wave设备来研究机器人技术、空间探索计划、空中交通控制等。另外也会用于可能适合人类居住星球的大量数据运算。20%的设备使用时间会开放给研究项目,鼓励所有研究团队提交申请书进行数据处理的请求,选择通过的就能免费使用这台超级计算机。

NASA推测:每年有超过200颗小行星撞击火星

NASA(美国国家航空与宇宙航行局)这些年来都通过各种航天设备和漫步者实时保持着对火星的观察。其中围绕火星最为重要的设备便是NASA的火星侦测轨 道飞行器(Mars Reconnaissance Orbiter)。最近NASA用这一设备观察了每年有多少小行星和彗星撞击火星表面并在火星表面形成一定尺寸的坑洞。

NASA特别观察了撞击后形成的至少12.8英尺的坑洞,研究人员通过系统的勘测,确认了248个分布在火星不同区域的受撞击观测点。NASA的科学家从侦测轨道飞行器中的图片判断出这些坑洞形成的时间。

NASA通过对一部分区域进行勘测,基于坑洞的确切数量推测,每年火星要遭到超过200颗小行星或小型彗星的撞击。NASA使用侦测轨道飞行器的高分辨率科学实验摄像头(Hi Resolution Science Experiment camera)拍下不同观测点的坑洞照片。

NASA表示,火星相比地球,遭受小行星、彗星碎片攻击的几率显然要大得多,因为火星的大气层比地球薄得多,撞击而入的小行星在通过大气层的时候并未燃烧殆尽。NASA的科学家表示,撞击火星的小行星和彗星碎片通常直径都在3~6英尺左右。

NASA还提到,今年2月份进入地球大气层划过俄罗斯车里雅宾克的火流星的体积相比撞击火星的这些小行星,要大出10倍。NASA说出现在表面的新坑洞可用于推测火星和其他星球景观特征的历史和年份。