黑马程序员----第四篇 初识OC

来源:互联网 发布:解压缩软件绿色版 编辑:程序博客网 时间:2024/05/14 03:57
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、基本语法

1、OC语言就是C语言的基础上,增加了一层最小的面向对象语法,OC语言完全兼容C语言,可以在OC代码中混入C语言代码,甚至是C++代码,可以使用OC开发Mac OS X平台和iOS平台的应用程序。

    OC与C语言一样有自己的关键字,但是关键字都是以@开头,主要的关键字如下所示:

@interface@implementation@end、@public@protected@private@selector、@try@catch@throw@finally 

@protocol@optional@required@class、@property@synthesize@dynamic

注:同样地关键字@”hello“OC语言中的字符串,而”hello”则是C语言中的字符串。

2跟C语言一样,OC程序的入口依然是main函数,只不过写到一个.m文件中。比如这里写到一个main.m文件中(文件名可以是中文)

1)第一个OC程序:

#include <stdio.h>

int main()

{

    printf("1OC程序\n");

    return 0;

}

(2)第二个OC程序:

#import <Foundation/Foundation.h>//头文件,用于提供NSLog函数

int main()

{

    NSLog(@"2OC程序);//打印输出,相当于C语言的printf函数

    return 0;

}

3、NSLog()与printf()函数的区别:

(1)NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数。

(2)NSLog输出后会自动换行,printf输出后不会自动换行。

(3)使用NSLog需要#import <Foundation/Foundation.h>

(4)使用printf需要#include <stdio.h>

4多个文件的开发(跟C语言开发一样)

有三个文件:main.m  one.m one.h

1main.m

#import "one.h"//声明调用了one.h头文件

int main()

{

    test();//调用test()函数

    return 0;

}

(2)one.h

void test();//声明test()函数

(3)one.c

#include <stdio.h>

void test()  //test()函数的主要实现部分

{

    printf("调用了test函数\n");  //打印输出结果

}

运行后输出结果:调用了test函数

二、面向对象

   1、OC与C语言的区别:

 OC是面向对象的语言,与C面向过程是两种不同的解决问题的思想。面向对象关注的时解决问题需要哪些对象。

例子:以电脑听歌为例子

      面向对象的思想是:电脑、开机、播放歌曲、关机。

      面向过程的思想是:打开电脑、播放电脑中的歌曲、关闭电脑

两者都能达到播放歌曲的目的,只是方式不同。

2、类和对象的关系:

面向对象中两个非常重要的概念:类(一般的名词都是类,拥有相同或是类似属性和行为的对象都可以抽象出一个类)和对象。

(1)OC中类的描述

两大步骤:类的声明、类的实现(定义)

类名的命名规范:与C语言一样要求有意义、驼峰标识等。

(2)例子:定义一个“车轮”类

#import <Foundation/Foundation.h> //因为使用了NSObject,必须写上头文件

//1.类的声明

//声明对象的属性与行为(即是方法)

@interface Car:NSObject   //NSObject(目的是:Car这个类具备创建对象的能力)

{//用来声明对象属性

@public //让外边的指针直接访问对象的内部成员变量

    int wheels; //轮胎的个数

    int speed; //时速

}

//方法(行为)要素:方法名参数 返回值(声明与实现)

//注意:方法不能放到大括号里边

//只要是OC对象的方法,必须以"-"开头

//OC方法中任何数据类型必须要用()扩起来

//OC()的作用:就是扩住数据类型,别的没有用,不要乱写.

-(void) run;  //方法的声明

@end

//2.类的实现(写方法的实现的)

//用来实现interface中声明的方法

@implementation Car

//方法的实现:方法里有什么代码

-(void)run

{

    NSLog(@"车子跑起来吧!!");

}

@end

int main()

{

    //OC,想执行一些行为,就写上一个钟括号[行为执行者 行为名称]

    //利用类来创建对象

    //执行了Car这个类的new行为来创建对象

    [Car new]; //定义一个指针变量p,p将来指向的是Car类型对.会创建一个新对象,并且会返回新对象本身(新对象的地址)

    Car *p = [Car new];

    Car *p2=[Car new];

    //p所指向的对象的wheels属性赋值


    p->wheels=4;

    p->speed=250;

    [p run];//给指针p所指向的对象发送一条run消息


    p2->speed=5;

    p2->wheels=300;

    [p2 run]; //给指针p所指向的对象发送一条run消息

   

    NSLog(@"第一个车子有%d个轮子,时速位:%dKm/h",p->speed,p->wheels);

    NSLog(@"第二个车子有%d个轮子,时速位:%dKm/h",p2->speed,p2->wheels);

    return 0;

}

输出结果:车子跑起来吧!!

        车子跑起来吧!!

        第一个车子有4个轮子,时速250Km/h

        第二个车子有5个轮子,时速300Km/h

(3)定义一个“人”类,并简单分析内存

代码截图如下:

输出结果:30岁、80.000000公斤的人走了一段路

内存分析如下:

 


0 0
原创粉丝点击