美文网首页
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、封装

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