iOS开发之OC语法基础(一)--类和对象

来源:互联网 发布:熊猫计划软件链接 编辑:程序博客网 时间:2024/05/24 01:46

一、两种常见的编程思想:

1、面向过程编程

面向过程编程事件(任务)为中心,程序围绕事件,列出了事件的每个步骤,一步一步完成。

2、面向对象编程

面向对象编程以事物为中心,程序围绕事物展开,完成事件只是一个小任务。


二、面向对象的三大特征

1、封装:

将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。

2、继承:

子类自动共享父类数据结构和方法的机制,这是类之间的一种关系

3、多态:

指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果


三、Objective-C

Objective-C中某个类的规格需要两个不同的部分:接口和实现。

.h文件:头文件。头文件包含类、类型、函数和常量声明。

.m文件:实现文件。具有此扩展名的文件可以同时包含Objective-C代码和C代码。有时也称为源文件。

.mm文件:实现文件。具有此扩展名的实现文件,除了包含Objective-C代码和C代码以外,还可以包含C++代码。仅当你实际引用你的Objective-C代码中的C++类或功能时,才能使用此扩展名。

下图声明一个名为MyClass的类,它是从基础类(或根类)NSObject继承而来的。(根类是供其他直接或间接继承的类。)类声明以编译指令@interface开始,以@end指令结束。类名称后面(以冒号分割),是父类的名称


注意:在Objective-C中,一个类只能有一个父类

下图是类的实现,类实现的语法与类接口文件类似。它以@implementation编译器指令开始(接着是该类的名称),以@end指令结束。中间时方法实现。(函数实现应在@implementation...@end块之外。)一个实现应该总是将导入它的接口文件作为代码的第一行。

#import "MyClass.h"@implementation MyClass- (id)initWithString:(NSString *)aName{// code goes here}+ (MyClass *)myClassWithString:(NSString *)aName{// code goes here}@end

Objective-C的方法

1、实例方法:由类的实例来执行。换言之,在调用实例方法之前,必须先创建该类的实例。实例方法是最常见的方法类型。

2、类方法:可由它所在的类直接执行。它不需要对象的实例作为消息的接收者。


四、创建一个Person类

创建一个Person类,包含姓名、年龄、性别三种属性和一个实例方法
1、声明部分Person.h
#import <Foundation/Foundation.h>//类的接口部分/*! 1、定义一个类 2、添加当前累属性 3、添加当前类行为(方法) */@interface Person : NSObject{    //大括号内部,添加当前类属性    //字符串类型    NSString *name;//姓名,NSString同样是一个类    //整型    NSInteger age;//年龄,NSInteger是数值类型    //字符串类型    NSString *gender;//性别}//大括号外部,添加当前类行为- (void)sayHi;@end

2、实现部分Person.m
#import "Person.h"@implementation Person- (void)sayHi{    //NSLog将字符串打印在控制台进行输出    NSLog(@"Hello World");}@end


五、创建Person类的实例对象

创建对象时,你通常会先分配再初始化。尽管这是两个分离的步骤,但它们却是紧密相连的。很多类还可以让你通过调用一个类工厂方法来创建对象!
1、声明部分Person.h
#import <Foundation/Foundation.h>//类的接口部分/*! 1、定义一个类 2、添加当前累属性 3、添加当前类行为(方法) */@interface Person : NSObject{    //大括号内部,添加当前类属性    //字符串类型    NSString *name;//姓名,NSString同样是一个类    //整型    NSInteger age;//年龄,NSInteger是数值类型    //字符串类型    NSString *gender;//性别}//初始化方法//希望通过初始化方法,能够获得一个Person类的实例对象,并且希望对象具有自己的姓名属性- (id)initWithName:(NSString *)_name;//大括号外部,添加当前类行为- (void)sayHi;@end

2、实现部分
#import "Person.h"@implementation Person- (id)initWithName:(NSString *)_name{    //1、原始初始化    self = [super init];    //2、原始初始化成功之后,需要设置当前对象的姓名为行参    if(self != nil){        name = _name;    }    //3、返回当前对象    return self;}//大括号外部,添加当前类行为- (void)sayHi{    //NSLog将字符串打印在控制台进行输出    NSLog(@"Hello World");}@end

3、在mian实例化Person对象
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {        //1、创建Person类的实例对象    Person *person = [[Person alloc]initWithName:@"hehe"];    //2、给person发送实例消息sayHi    [person sayHi];        return 0;}


六、Person类的GET和SET方法

实例对象通过设置器和访问器去修改和获取当前对象的值
1、声明部分Person.h
#import <Foundation/Foundation.h>//类的接口部分/*! 1、定义一个类 2、添加当前累属性 3、添加当前类行为(方法) */@interface Person : NSObject{    //大括号内部,添加当前类属性    //字符串类型    NSString *name;//姓名,NSString同样是一个类    //整型    NSInteger age;//年龄,NSInteger是数值类型    //字符串类型    NSString *gender;//性别}//初始化方法//希望通过初始化方法,能够获得一个Person类的实例对象,并且希望对象具有自己的姓名属性- (id)initWithName:(NSString *)_name;//大括号外部,添加当前类行为- (void)sayHi;//设置器 setter- (void)setName:(NSString *)_name;- (void)setAge:(NSInteger)_age;- (void)setGender:(NSString *)_gender;//访问器 getter- (NSString *)getName;- (NSInteger)getAge;- (NSString *)getGender;@end

2、实现部分Person.m
#import "Person.h"@implementation Person- (id)initWithName:(NSString *)_name{    //1、原始初始化    self = [super init];    //2、原始初始化成功之后,需要设置当前对象的姓名为行参    if(self != nil){        name = _name;    }    //3、返回当前对象    return self;}//大括号外部,添加当前类行为- (void)sayHi{    //NSLog将字符串打印在控制台进行输出    NSLog(@"Hello World");}//设置器 setter- (void)setName:(NSString *)_name{    //设置给当前对象的属性    name = _name;}- (void)setAge:(NSInteger)_age{    age = _age;}- (void)setGender:(NSString *)_gender{    gender = _gender;}//访问器 getter- (NSString *)getName{    return name;}- (NSInteger)getAge{    return age;}- (NSString *)getGender{    return gender;}@end

3、在main函数中测试
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {        //1、创建Person类的实例对象    Person *person = [[Person alloc]initWithName:@"hehe"];    //2、给person发送实例消息sayHi    [person sayHi];        //3、先打印当前person实例对象的姓名是什么    NSLog(@"person's name is %@",[person getName]);        //4、修改当前person实例对象的姓名,修改成Jack    [person setName:@"Jack"];        //3、第二次打印当前person实例对象的姓名是什么    NSLog(@"person's name is %@",[person getName]);        return 0;}

七、总结

1、面向对象和面向过程有什么区别!
2、OC中如何创建一个类!
3、OC中如何创建实例对象!
4、OC中实例属性的存取器的写法!



0 0