一、基本语法
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("第1个OC程序\n");
return 0;
}
(2)第二个OC程序:
#import <Foundation/Foundation.h>//头文件,用于提供NSLog函数
int main()
{
NSLog(@"第2个OC程序”);//打印输出,相当于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
(1)main.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公斤的人走了一段路
内存分析如下: