—-Java培训、Android培训、iOS培训、.Net培训期待与您交流—-
一、OC简介
oc是在c语言的基础上,增加了面向对象的语法,开发的一种语法。
oc可以完全兼容c语言,可以在oc中混入c语言代码和一部分的c++代码
oc用途:用于Mac os x平台和ios平台的应用程序开发
文件后缀名c->.c oc->.m c++->.m
二、语法
1.关键字都是以@开头:@interface,@implementation,@end,@public,@protected等等
2.字符串以@开头: @”Hello”
3.其它语法
基本数据类型:char,int,float,double,BOOL…
null:相当于c语言中的null
基本语句: 循环语句,条件语句等等
三、OC基本理解
1.OC程序运行过程
m源文件(编译)->.o目标文件(链接)->a.out(可执行文件)
2.示例:
.#import
<1>用途:
跟#include一样,拷贝文件的内容
可以自动防止文件的内容被重复拷贝
<2>主头文件
主头文件:最主要的头文件,名字一般跟框架名称一样,包含了框架中的所有其他头文件
Foundation框架的主头文件名称就是Foundation.h
只需要包含Foundation框架主头文件,就可以使用整个框架的东西
<3>运行过程
1> 编写OC源文件:.m、.c
2> 编译:cc -c xxx.m xxx.c
3> 链接:cc xxx.o xxx.o -framework Foundation
总结:只有用到了Foundation框架才需要加上-framework Foundation)
<4>NSLog与printf的区别
NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数
NSLog输出后会自动换行,printf输出后不会自动换行
使用NSLog需要#import <Foundation/Foundation.h>
使用printf需要#include<stdio.h>
3.BOOL变量
BOOL类型的变量有2种取值:YES(为1)、NO(为0)
BOOL的输出(当做整数来用)
4.面向对象和面向过程
OC是面向对象的,C是面向过程的
常用术语:
面向过程:procedure oriented
面向对象:object oriented(简称OO)
面向对象编程:object oriented programming
面向对象和面向过程的区别:
示例:以人打开电脑听歌为例子
a.面向过程:1>打开电脑 2>播放电脑中歌曲 3>关闭电脑
b.面向过程:1>开机 2>播放歌曲 3>关机
区别分析:面向过程关注的是解决问题需要哪些步骤,面向对象关注的是解决问题需要哪些对象
5.类和对象的关系
前面已经简单介绍了面向对象的思想,在面向对象的编程思想中,有两个名词我们会经常用到:类和对象
1.我们可以把【类】和【对象】的关系就像是【图纸】和【实物】的关系。在学习OC的过程中,我们要习惯把所有可能的主体具化成对象。
2.OC是利用类来创建对象,对象是类的具体存在。
3.面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象。
<1>类的创建
举个例子:如果“动物图纸”是一个类,那么我们就可以根据这张图纸创建出很多个动物实体,这些动物实体就是“动物图纸”这个类生成的对象。
在创建类时,有两个要素:【属性】和【行为】(一般习惯把”行为”称呼为”方法”)
在图纸中,我们需要描述清楚动物的:年龄,重量、毛色、速度、等等,这些就是动物这个类的属性;
而动物具有跑、跳、叫、打架等行为,这些行为(方法)我们也需要在动物这个类中写明。
<2>类的创建方法
类的创建分为声明和实现两部分,一般类的声明写在.h文件中,类的实现写在.m文件中。
类的属性不需要写实现,所以类的实现其实就是写方法的实现。方法的声明和实现方法有点象函数的声明和实现。
类名的声明写在@interface 和 @end 之间
//文件名:Car.h
//这个文件中写类的声明
#import <Foundation/Foundation.h>
//@interface标志着类的生命开始
//这格式固定格式:@interface 类名 :父类名(父类是后面所学,当前我们默认写NSObject)
@interface Car : NSObject
{
//对象属性默认是被保护的,想要直接访问就必须在属性前加上@public
@public
//属性声明
int _wheels; //轮胎个数
int _speed; //时速
}
//大括号后面写类的方法的声明
//累的方法有2种:1.对象方法:只有这个类创建出来的对象才能调用,以-号开头
2.类方法:只有这个类可以调用,以+号开头
//这是一个对象方法的声明
- (void) run;
//@end标志着类的声明的结束
@end
类的实现
类名的实现写在@implementation 和 @end 之间
Car.m //文件名
//这个文件写类的实现,类的实现其实就是方法的实现,因为类的属性不需要写实现
//把类的声明拷贝到这个文件中,以便写方法的实现时让程序可以找到属性和方法的声明
#import "Car.h"
//@implementation标志着类的实现的开始
@implementation Car
//在@implementation和@end之间写类的实现
- (void)run
{
NSLog(@"车子跑起来了");
}
//@end标志着类的实现的结束
@end
2.对象的创建
OC中,我们可以根据一个类创建出无数个对象。其实,类也是一个对象。只要是对象,我们就可以调用对象所具有的方法。
调用对象方法的语法是: [ 对象名 方法名 ];
所有类都默认有一个名叫 new 的方法,我们通过这个方法可以创建出类。
int main()
{
//在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称] ->[Car new]
[Car new];//执行了Car这个类的new行为来创建新对象
Car *p = [Car new]; //定义了指针变量p,p指向Car类型的对象
//Car new会创建出一个新对象,并且会返回新对象本身(新对象地址)
p->wheels = 4;
p->speed = 250; //给新对象的wheels属性,speed属性赋值
NSLog(@"车子有%d个*,时速为:%dkm/h",p->wheels, p->speed);
return 0;
}
3.类的命名规范
1>.类名的命名规范
类名的第一个字母必须是大写
不能有下划线
多个英文单词,用驼峰标识
2>.属性的命名规范
必须以下划线开头(行业规范,后面我们就会知道为什么这样命名)
多个英文单词,驼峰标识
3>.方法的命名规范
方法名以加号’+’或减号’-‘开头,对象方法以减号开头,类方法以加号开头。
方法名前写返回值类型,如果需要传入参数,方法名以冒号结束,并在冒号后面描述参数类型和形参名称
数据类型必须用括号括起来 例如:(void)、(int) 、(NSString*)
4.方法和函数的区别
1>.对象方法都是以减号-开头。
2>.对象的方法声明必须写在@interface和@end之间
3>.对象的方法实现必须写在@implementation和@end之间
4>.对象方法只能由对象来调用,不能当做函数来调用
5>.函数能写在文件的任何位置,函数归文件所有
6>.函数调用不依赖于对象
7>.函数内部不能直接通过成员变量名访问某个对象的成员变量