OC三大特性之封装

一、面向对象和封装

1.面向对象的三大特性:封装(成员变量)、继承和多态

在OC语言中,使用@interface和@implementation来处理类。

2.封装:封装是对象和类概念的主要特性。它是隐藏内部实现,稳定外部接口,可以看作是“包装”。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
好处:使用更加简单  变量更加安全 可以隐藏内部实现细节  开发速度加快


@interface就好像暴露在外面的时钟表面,像外界提供展示以及接口。@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来。

二、Set方法

    1.作用:

1>为外界提供一个设置成员变量值的方法

2>对不合理的赋值进行过滤

    2.命名规范:

1>方法名必须以set开头

2>Set后面跟上成员变量的名称,首字母大写

3>返回值一定是void

4>一定要接收一个参数,而且参数类型需要和成员变量的类型一致

5>形参名不能喝成员变量名一样(苹果官方推荐成员变量名前加_以示区分)

    3.set方法的声明
#import <Foundation/Foundation.h>
@interface Person : NSObject {
    int _age;
}
// set方法的声明,接收一个int参数
// 方法名是 setAge: 后面的冒号:也是函数名的一部分
- (void)setAge:(int)age;
@end

    4.set方法的实现

#import "Person.h"
@implementation Person
// set方法的实现
- (void)setAge:(int)age {
    _age = age;
}
@end

三、Get方法

    1.作用:为调用者返回对象内部的成员变量

    2.命名规范:

1>必须有返回值,返回值的类型和成员变量的类型一致

2>方法名和成员变量名一样

3>不需要接收任何参数

    3.get方法的声明

#import <Foundation/Foundation.h>
@interface Person : NSObject {
    int _age;
}
- (void)setAge:(int)age;
// get方法的声明
- (int)age;
@end
    4.get方法的实现

#import "Person.h"
@implementation Person
- (void)setAge:(int)age {
    _age = age;
}
// get方法的实现
- (int)age {
    return _age;
}
@end
    注意:

1>在实际的开发中,不一定set和get方法都会提供,如果内部的成员变量比如学生的学号这样的数据只允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set方法。

2>成员变量名的命名以下划线开头,get方法名不需要带下划线,使用下划线开头有两个好处:(1)与get方法的方法名区分开来;(2)可以喝一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。

四、类方法

    1.定义:直接使用类名进行调用。

[Person new]; // Person类直接调用new方法

    2.语法:类方法都是以+开头

+ (void)run;   // 声明一个run的类方法

    3.类方法和对象方法区别

注意点:对象方法可以和类方法重名。

    4.对象方法和类方法的区别

对象方法:

1>减号-开头

2>只能由对象来调用(首先要通过类创建方法)

3>对象方法能访问当前对象的成员变量

4>需要传递参数

访问机制:首先通过对象指针访问对象,然后再通过对象内部的ISA指针访问类。(访问过程比较复杂)

类方法:

1>加号+开头

2>只能由类来调用

3>类方法不能访问成员变量

4>不需要传递参数 

优点:不依赖于对象,执行效率高。

使用场合:当方法内部不需要使用成员变量时,就可以使用类方法

访问机制:直接访问类。

工具类:基本没有任何成员变量,而且其中的方法都是类方法。

五、Self关键字

    1.概念:Self是一个指针,谁调用了当前方法,self就指向谁

出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类

    2.Self的用途:

(1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)

(2)[self 方法名];可以调用其他的对象方法或者是类方法

// 常见错误示例
@implementation Person
- (void)test
{
    NSLog(@"调用了-test方法");    
    // 会引发死循环
    //[self test];
}
+ (void)test
{
    NSLog(@"调用了+test方法"); 
    // 会引发死循环
    //[self test];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值