美文网首页
03-OC、封装

03-OC、封装

作者: amoLink | 来源:发表于2017-04-24 09:31 被阅读20次

一、封装

面向对象的三大特征:封装、继承、多态。
  在OC中,使用 @interface@implementation 来处理类。

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

二、set 方法

开发过程中,考虑到数据的安全性和合理性,一般不使用 @public 关键字修饰成员变量,而是使用 set 方法来为对象提供成员变量的值。在 set 方法中可以对一些不合理的赋值进行过滤。
  set 方法的作用:为外界提供一个设置成员变量的方法。

  • 规范:

  • 方法名必须以 set 开头;

  • set 后加上成员变量名,首字母大写;

  • 返回值一定是 void;

  • 必须接收一个参数,且类型与成员变量一致;

  • 形参名不能喝成员变量名一样。(苹果推荐成员变量名以 _ 开头)

  • set 方法的好处

  • 不让数据暴露在外,保证数据的安全性;

  • 可以对设置的数据进行选择性过滤。

  • set方法使用示例:
    方法声明

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _age; // 成员变量,无@public修饰
}
- (void)setAge:(int)age; // set 方法声明
- (void)print;
@end

方法实现

#import "Person.h"

@implementation Person
- (void)setAge:(int)age
{
    _age = age;
}
- (void)print
{
    NSLog(@"_age = %d", _age);
}
@end

测试程序

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool
    {
        Person *p = [[Person alloc] init];
        [p setAge:18];
        [p print];
        
        NSLog(@"纸上得来终觉浅...");
    }
    return 0;
}

运行结果

HelloWorld[783:40143] _age = 18
HelloWorld[783:40143] 纸上得来终觉浅...

三、get 方法

既然有设置成员变量的方法,那就有获取成员变量的方法,get方法就是用来获取成员变量的。
  get方法作用:为调用者返回对象内部的成员变量。

  • 规范
    • 必须有返回值,返回成员变量;
    • 方法名与成员变量一致;
    • 不需要接收参数。
  • get 方法示例
    声明
#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _age; // 成员变量,无@public修饰
}
- (void)setAge:(int)age; // set 方法声明
- (int)age;  // get 方法声明
@end

实现

#import "Person.h"

@implementation Person
- (void)setAge:(int)age
{
    _age = age;
}
// get 方法实现
- (int)age
{
    return _age;
}
@end

测试程序

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool
    {
        Person *p = [[Person alloc] init];
        [p setAge:18];
        NSLog(@"age = %d", [p age]);
        
        NSLog(@"纸上得来终觉浅...");
    }
    return 0;
}

运行结果

HelloWorld[1346:84182] age = 18
HelloWorld[1346:84182] 纸上得来终觉浅...

四、self 关键字

self 是一个指针,谁调用了当前方法,self 就指向谁。在对象方法中就代表调用方法的对象,在类方法中就代表调用方法的类。

  • self的用途
    • 在对象方法中可以利用 self ->成员变量 访问当前对象的成员变量。
    • [self 方法名]; 可以调用其他的对象方法或类方法。

相关文章

  • 03-OC、封装

    一、封装 面向对象的三大特征:封装、继承、多态。在OC中,使用 @interface 和 @implementat...

  • 03-OC中KVO的底层原理

    KVO本质 什么是KVO? KVO:Key-Value Observing,用来监听类的某个对象的某个属性的值发生...

  • 03-OC方法调用的底层分析

    OC底层原理探索文档汇总[https://www.jianshu.com/p/04883ea4f5aa] 分析对象...

  • JavaScript面向对象与设计模式

    1. 面向对象 1.1 封装 封装的目的在于将信息隐藏。广义的封装不仅包括封装数据和封装实现,还包括封装类型和封装...

  • 02.OOP面向对象-3.一些理解

    对封装的理解?封装,类本身就是一个封装,封装了属性和方法。方法也是封装,对一些业务逻辑的封装。私有也是封装,将一些...

  • 封装微信小程序请求

    封装wx.request 封装api 封装请求调用

  • python 文件及文件夹的操作和异常捕获

    1、面向对象的特征:封装、继承、多态 1.1、封装: 函数一种封装,封装了一些逻辑代码 类也是一种封装,封装属性和...

  • node学习4

    Nodejs 路由模块封装、封装仿照 express 的路由 Nodejs 路由模块封装 封装仿照 express...

  • 封装组件

    封装tab组件封装曝光加载组件封装轮播组件 代码

  • MVVM在网络中应用(OkHttp+Retrofit+Gson+

    1.封装请求地址常量类 2.封装网络工具类 3.封装接口类 4.封装DTO类——即返回的数据封装模型 5.封装请求...

网友评论

      本文标题:03-OC、封装

      本文链接:https://www.haomeiwen.com/subject/xijhzttx.html