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

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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值