——黑马程序员——OC中的基本概念

-----------android培训java培训、java学习型技术博客、期待与您交流!-----------

OC中的基本概念

一、OC语言简介和特点

Objective-C:简称 ObjC 或 OC ,是扩充C的面向对象的编程语言。

二、OC和其他语言的区别;

1、OC 和java 语言一样,不支持多重继承,而C++语言支持多重继承

2、OC是动态类型,在运行时可以允许根据字符串名字来访问方法和类,还可以动态链接

3、OC与C的关系:OC向下兼容C

三、面向对象程序设计概念

面向对象程序设计主要包括:对象、类、数据抽象、继承、多态、数据封装、动态绑定、消息传递

1、类:具有相同的内部结构和运动规律的集合,具有相同类型的类的集合

2、对象:现实世界中的实体,具有相同类型的对象的抽象

3、方法:也称成员函数,是指对象上的操作,

4、消息:对象之间相互联系相互作用的方式,消息传递指的是一个对象调用了另一个对象的方法

5、继承:是类和类之间的关系,一个类共享了一个或者多个其他类定义的结构和行为,之类可以对基类的行为进行扩展、覆盖、重定义

6、多态:不同的多种对象可以以不同的方式响应相同名称方法的能力

7、封装:数据暴露在外不安全,为防止修改将数据和操作捆绑在一起隐藏起来,只对外界提供一个接口

8、动态绑定:指的是一个对象或者表达式的类型知道运行时才能确定其类型

四、类的声明和实现

1、类的声明(规定当前类的:类名、属性、行为)

@interface  类名:父类名

{

//定义类的属性

}

//类的行为

@end

2、类的实现(实现具体的行为)

@implementation 类名

//行为的具体实现

@end

例如:声明实现一个车的类

@interface Car :NSObject

{

@public;

 //类的属性

int lunzi;

NSString *color;

int speed;

}

//类的行为

-(void)run;

@end

类的实现

@implementation Car

//行为的具体描述

-(void)run{

NSLog (@"车正在跑");

}

@end

五、OC中对象的创建

[ 类名   new ]

如:[Car  new]

它做了三件事情:

1、向计算机申请一个内存空间

2、给类中的每一个成员初始化值

3、返回新申请的空间的首地址

需要定义一个Car类型的指针变量接收,因为返回的是一个空间的首地址

Car *p = [ Car   new ];

理解方式有两种

第一:定义一个Car类型的指针变量,指向了新申请的内存空间,本质是指针

第二:用Car 类实例化了一个实例对象,对象的名称是p

六、对象成员变量的访问并赋值

p->lunzi = 3;

p->speed = 150;

p->color = @"蓝色";

七、OC中方法的方法

方法分为类方法和对象方法两种

对象方法:

1、对象方法以 —  开头,如-(void)run;

2、对象方法只能由对象来调用

3、对象方法中可以访问当前对象的成员变量

4、调用格式: [ 对象名   对象方法名 ];

类方法:

1、类方法以 + 开头,如 + (void)stop;

2、类方法只能由类来调用

3、类方法不能访问成员变量,因为类方法是由类类调用的,并没有创建存储空间来存储类中的成员变量

4、类方法调用格式:[ 类名   类方法名 ]

5、类方法的优点:不依赖于对象,执行效率高

6、当方法内部不需要使用到成员变量时,可以使用类方法

7、能用类方法解决的问题,尽量使用类方法

八、对象和方法之间的关系

1、对象作为方法的参数

#import <Foundation/Foundation.h>

typedef enum { kSexMan, kSexWomen, kSexYao }Sex;

//定义一个person类
@interface Person :NSObject
{
	@public

	NSString *_name;
	
	Sex _sex;	
}
//对象作为方法参数
-(void) dispPerson: (Person *) person;
//对象作为方法的返回值
-(Person *)changeSex: (Person *)person;
@end


//类的实现
@implementation Person

//类的实现 
- (void) dispPerson: (Person *) person{

	NSLog(@"姓名:%@,性别:%d",person->_name,person->_sex);
}

- (Person *)changeSex: (Person *) person{
//修改性别
 person->_sex = kSexYao;

	return person;
}
@end

int main (int argc, const char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];                         
   
    //在此处输入Objective-C代码
   
		//创建对象p
	Person *p = [Person new];
	//创建对象p1
	Person *p1 = [Person new];
	
	p1->_name = @"张三";
	p1->_sex = kSexMan;
	
	//对象作为方法的参数调用
	[p dispPerson: p1];
	   
    [pool drain];
    return 0;
}

2、对象作为方法的返回值

#import <Foundation/Foundation.h>

typedef enum { kSexMan, kSexWomen, kSexYao }Sex;

//定义一个person类
@interface Person :NSObject
{
	@public

	NSString *_name;
	
	Sex _sex;	
}
//对象作为方法参数
-(void) dispPerson: (Person *) person;
//对象作为方法的返回值
-(Person *)changeSex: (Person *)person;
@end

//类的实现
@implementation Person

//类的实现 
- (void) dispPerson: (Person *) person{

	NSLog(@"姓名:%@,性别:%d",person->_name,person->_sex);
}

- (Person *)changeSex: (Person *) person{
//修改性别
 person->_sex = kSexYao;

	return person;
}
@end

int main (int argc, const char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];                         
   
    //在此处输入Objective-C代码
   
		//创建对象p
	Person *p = [Person new];
	//创建对象p1
	Person *p1 = [Person new];
	
	p1->_name = @"张三";
	p1->_sex = kSexMan;
	
	//对象作为方法的参数调用
	[p dispPerson: p1];
	[p changeSex: p1];
	
	NSLog(@"姓名:%@, 性别:%d",p1->_name, p1->_sex);	   
    [pool drain];
    return 0;
}

九、函数和对象方法的区别

1、对象方法声明只能写在@interface...@end 中,实现只能写在@implementation...@end 中间

2、对象方法不能当做函数一样累调用

3、函数属于整个文件,可以写在文件的任何位置,可以写在@implementation...@end中,但是写在@interface...@end中会无法识别,函数的声明可以写在main函数的内部也可以写在main函数的外部

4、对象方法归对象、类所有

5、所有的函数是平行的,不存在隶属关系

6、函数使用的时候可以直接调用

7、函数不能访问它的成员变量


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值