黑马程序员——ObjC基础—第一个程序

来源:互联网 发布:癫佬正传观后感知乎 编辑:程序博客网 时间:2024/04/30 00:49
-----------Java培训、Android培训、IOS培训、.Net培训、期待与您交流!------------ 
Objective-C(简称OC)语言是一种基于c语言的面向对象的高级语言,主要运用于苹果各产品系统及软件的开发,近年来,由于苹果的壮大而逐渐兴起。Objective-C和其他语言相比起来,具有以下几点优势(个人观点):
a、面向对象,作为一门高级语言,面向对象是OC的主要优势。
b、运行时,很多编程语言的内部数据在编译的过程中就已经定义好,按部就班的去执行,OC增加了一种特殊的类型(id类型),运用这种特性,我们可以创建一些无需事先知道参数类型就可以设计功能,在程序的运行过程中,再根据具体的语境来判断,非常的灵活。
c、消息机制,OC语言是以c语言为基础的语言,但是他的规范要求我们屏蔽掉函数方法的调用,他采用一种更加安全有效的消息机制来处理具体的问题,在该语言中,实际上是采用SEL类型的数据(字符串)对具体方法进行了封装,我们通过访问SEL来访问具体方法。在第一条中我们了解到,OC中存在运行时,消息机制充分利用这种特性,在程序的运行过程中才根据需要调用方法,同时他对参数的要求也更加灵活,无效的参数(消息)也不会导致程序的崩溃。
d、OC语言与Java等基于c的语言还有一个不同点是他可以直接内嵌c语言,实现混编。我们知道c语言在操作底层方面有无法比拟的优势,这种优势同样继承到了OC中。
下面通过一个简单的例子来了解一下OC语言的使用。

1、需要的东西
a、首先要有一台苹果电脑,当然黑苹果也是可以的,本人使用MacBook Air;
b、预装XCode5.1.1,当然其他版本也是可以的;

2、开始
打开xcode软件,默认弹出新建工程向导,选择Command Line Tool以创建一个基于终端的命令窗口程序,Type栏里选择Foundation框架(这是苹果建立的专门用于苹果开发的资源库,此处选择这个框架后,在程序中我们就可以任意使用),创建好的工程如下图所示:

该工程文件分为三个部分,列举如下:
HelloWorld:我们的工程放在这
Frameworks:系统资源在这里(Foundation框架)
Products:生成的程序在这里
在我们的工程目录里,我们可以找到一个名叫main.m的文件,这就是我们主要的工作文件,main函数(程序入口)在这个文件里。在右边的窗口中指示了main.m中的内容,我们大致可以读懂其内容。
一些新的内容我在里面加上了注释:
#import <Foundation/Foundation.h> // 包含的框架(OC中采用import取代include)/*  注:在c语言中关于头文件的包含是一个很头疼的问题,在有大量文件的时候,为了防止头文件被多次包含,需要用到条件编译指令,这样导致每一个头文件里都有大量的条件编译指令,我们把大量时间浪费在这上面是不合适的,而import则代为处理这些工作,类似的简化操作的指令,我们以后会遇到很多。*/int main(int argc, const char * argv[]){ // 程序入口,后面的参数为运行时接收的参数    @autoreleasepool { // 自动释放内存池    /*    注:自动释放池是一种特殊的对象,他会在大括号括起来的内容在走到结尾的时候自动对内部的堆数据进行清理,为了方便学习,这里我们一般直接删掉()    */                // insert code here...        NSLog(@"Hello, World!"); // 代码区域        /*        注:又是一个陌生的函数,这个函数是Foundation框架中带的一个函数,用于取代printf进行调试输出,当然他也具有一些新的特性,这个函数在输出的时候包含一些运行时特性,而且能够自动换行,同时,对于新增的对象,也增加了占位输出的功能。必须了解的是,NSLog函数是以printf函数为基础的,当然在这里我们也可以直接使用printf函数。注意格式中的@符号。        */    }    return 0;}

3、编译和调试
在xcode中编译链接工作相当简洁,只需要点击左上角的三角形按钮即可,程序会在下方的窗口输出:
2015-02-08 11:38:30.519 HelloWorld[11671:303] Hello, World!

4、OC还有哪些新的东西?
a、新增BOOL类型
    BOOL a = YES;    BOOL b = NO;        NSLog(@"a = %d  大小为: %lu Byte", a, sizeof(a));    NSLog(@"b = %d  大小为: %lu Byte", b, sizeof(b));
输出:
2015-02-08 11:47:04.704 Study[11784:303] a = 1  大小为: 1 Byte2015-02-08 11:47:04.708 Study[11784:303] b = 0  大小为: 1 Byte
b、字符串
    NSString *str=@"a string"; // 字符串对象的定义        NSLog(@"%@", str); // 字符串对象的输出
字符串在OC中以对象的形式存在,关于对象将另行讨论,输出如下:
2015-02-08 11:58:21.088 Study[11813:303] a string
c、SEL类型
    SEL s = @selector(sss);        NSLog(@"%s", s); // 会出警告(s为SEL类型的结构体,内部包含一个字符串)
输出结果为:
2015-02-08 12:11:06.388 Study[11908:303] sss
d、nil 与 NIL
这是表示对象空的值。
    NSLog(@"%p", nil);    NSLog(@"%p", Nil);
输出结果为:
2015-02-08 12:13:27.842 Study[11952:303] 0x02015-02-08 12:13:27.845 Study[11952:303] 0x0
习惯上,nil用于指向空,而Nil特别用于指向空的类。
e、id对象
采用id定义的对象是一个类型任意的对象。将在以后接触到。
f、封装
OC对基本的数据类型进行了对象化封装,增加了数据处理的灵活性,如:
<strong> </strong>   NSNumber *a = [[NSNumber alloc] initWithInt:65]; // 创建数字对象        NSLog(@"%@", a); // 输出
上述代码将数字封装成对象,对象具有很多灵活的操作方法,而且能够更方便的进行传递。

g、SEL类型
    NSObject *obj = [NSObject new];    SEL s = @selector(description); // 创建一个SEL指针    NSString *str = [obj performSelector:s]; // 相当于 NSString *str = [obj description];
OC中对方法的访问是通过SEL类型的指针来实现的,每一个方法内部都有一个SEL类型的指针_cmd,通常的方法访问是通过这个_cmd指针间接访问的。

h、宏占位符
以下是常见的Xcode宏占位符,方便我们的调试工作。
        // 常用macros        NSLog(@"当前行号:%d",__LINE__);        printf("当前文件%s",__FILE__);//NSLog无法输出中文字符        NSLog(@"当前函数:%s",__FUNCTION__);        NSLog(@"当前函数:%s",__func__);        NSLog(@"当前函数:%s",__PRETTY_FUNCTION__);



-----------Java培训、Android培训、IOS培训、.Net培训、期待与您交流!------------ 
0 0