Chinaunix首页 | 论坛 | 博客
  • 博客访问: 757403
  • 博文数量: 26
  • 博客积分: 8255
  • 博客等级: 中将
  • 技术积分: 934
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-06 01:52
文章分类

全部博文(26)

文章存档

2012年(1)

2011年(8)

2010年(10)

2008年(7)

分类: C/C++

2011-05-27 14:23:29

为了更好的方便各位同学理解和学习 object-c 编程语言,本文是我阅读 "programming in object-c 2.0" [在共享文件中可以下载] 后总结而成。目的在于帮助大家理解该英文教程中容易混淆的概念的实例。

首先建议各位最好别用unix shell 连运行你的 object-c 程序,虽然那样做是行得通的,但是面对以后我们“项目”中几十个文件你用shell来编译运行,是一件很费时间和精力的事情。就用xcode 吧,这也是为什么大家需要一台苹果电脑的原因。

我们从一个最简单的“hello world” 开始:标注为当前不需要理解的地方,后续会有详细的解释。

  1. #import <Foundation/Foundation.h>
  2. int main (int argc, char *argv[]) {
  3.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  4.     NSLog(@"hello,world");
  5.     [pool drain];
  6.     return 0;
  7. }

首先看到的应该是 object-c 是大小写敏感的,其次,程序的注释使用 // 或者 /* ..... */ 这和绝大多数类c语言是一样的。

#import 表示 导入 名为 Foundation.h 的文件,或者理解为“头文件” 它的位置在“Foundation/Foundation.h” 。这样做就告诉了编译器,去那里查找并调用它。

有经验的人会问,import 和 include 有什么区别,这里为什么不用 include?

首先需要说明,你仍然可以使用 #include , 这样做编译器每次都会在执行主程序之前首先编译被包含的文件,对于电脑来讲这点资源的消耗并不算什么,毕竟电脑具备高速运算和存储能力。那么import 仅仅是告诉编译器,我们需要来用到这个文件,而并不需要编译它,只有在主程序执行到特定位置时,才会回头查找 Foundation.h 中的相应代码,这对运行 iOS的移动设备来讲,能够有效的节省计算资源,提高运行效率。

所以,忠告就是 永远不要在iOS开发中使用 include

int main (int argc, char *argv[]) ,这里出现了关键字  main 标志着主程序从这里开始,int 表示这个主程序是有一个返回值的,而且这个返回值还是一个整数。(int argc, char *argv[]) ,括号中写入的是程序参数,这里是命令行参数,我们以后再解释。

  1. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

  2. .....

  3. [pool drain];

以上两行代码用来管理该程序的内存分配和释放。这里无需多讲,后面有专门的内存管理专题再做解释。

NSLog(@"hello,world");  这里就是用来在命令行打印出 hello world 的代码了。NSLog 就是我们从 Foundation.h 引进的实例方法,你也可以把它理解成为一个函数,这个方法的作用就是让你通过特定的格式来输出一段文本,或者其他什么的。

如果我们想输出多行文本怎么办?

NSLog(@"hello,world\n helloworld2\n helloword3\n helloword4");

\n 的作用就是换行。

如果我们想输出 1+2 = 3 怎么办?

我们来修改主程序:

  1. #import <Foundation/Foundation.h>
  2. int main (int argc, char *argv[]) {
  3.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  4.     int a, b;
  5.     a=1;
  6.     b=2;
  7.     NSLog(@"%i+%i=%i", a,b,a+b);
  8.     [pool drain];
  9.     return 0;
  10.     }

我们看到 通过定义了 2个整数变量 a,b 并为它们附值,在NSLog中,我们用%i 来表示变量类型,那么就是 一个变量 加上 另一个变量 等于某一个变量。然后分别按照顺序,来对应 a, b, a+b

执行结果:

Running…
2011-05-27 10:44:58.704 firstapp[876:a0f] 1+2=3

最后我们看到了一个 return 0,还记得我们的主程序int main 表示它是有一个返回值吗? return 0 的用意就在这里。

在默认情况下,main 的返回值就是一个整数,让我们删除 int ,并且删除 return 0 看看程序是否依旧能够执行

  1. #import <Foundation/Foundation.h>
  2. main (int argc, char *argv[]) {
  3.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  4.     int a, b;
  5.     a=1;
  6.     b=2;
  7.     NSLog(@"%i %i=%i", a,b,a+b);
  8.     [pool drain];
  9.     }

执行结果:
Running…
2011-05-27 10:46:13.262 firstapp[906:a0f] 1+2=3

由此可见,默认情况下,main是有返回值的,且返回值为整数。











阅读(3094) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

kkboy_dyc2011-05-27 15:57:18