• Objective


    前言

    在第一天里面, 我们知道了类, 对象, 方法, 还有一些基础知识, 到了第二天, 我们继续往下来慢慢学习, 只有耐心的学习, 才能学的好, 否则就像没有基座的塔一样, 倒了~


    开始

    在之前的例子里, 我们都知道怎么声明成员变量, 但如果要去访问成员变量的话, 就必须得写一个@public才能访问, 否则编译器会报错, 那么为什么会这样子呢? 下面让我们来慢慢解释:


    在OC中, 在.m文件里声明的成员变量都是属于私有的, 也就是受保护的, 如果没有写@public, 那么就只有通过特殊的手段才能访问, 那么如何访问呢? 下面让我们来看看例子:

    #import <Foundation/Foundation.h>
    
    @interface Preson : NSObject
    {
        int age;
    }
    - (void)test;
    @end
    
    @implementation Preson
    - (void)test
    {
        NSL(@"一个%d岁的人在走路.", age);
    }
    @end
    
    int main()
    {
        Preson *p = [Preson new];
        p->age = 20;
        
        [p test];
        
        return 0;
    }

    这里我没有写@public, 所以输出的结果是:

    1.封装思想.m:13:5: warning: implicit declaration of function 'NSL' is invalid in C99
          [-Wimplicit-function-declaration]
        NSL(@"一个%d岁的人在走路.", age);
        ^
    1.封装思想.m:20:8: error: instance variable 'age' is protected
        p->age = 20;
           ^
    1 warning and 1 error generated.


    编译器会报错, 说age这个成员变量被保护, 无法访问, 但我们之前也知道了, 不能在声明成员变量的时候给它赋值, 那么我们该怎么做呢?? 让我们继续往下看~~



    在OC中, 有一种专门的方法来解决存取成员变量的方法, 它们就是Set方法和Get方法, 什么是Set方法? 什么是Get方法? 下面让我们一起来看看:

    Set方法:

    #import <Foundation/Foundation.h>
    
    @interface Preson : NSObject
    {
        int age;
    }
    - (void)test;
    - (void)setAge:(int)newAge;
    @end
    
    @implementation Preson
    - (void)test
    {
        NSLog(@"一个%d岁的人在走路.", age);
    }
    
    - (void)setAge:(int)newAge
    {
        age = newAge;
    }
    
    @end
    
    int main()
    {
        Preson *p = [Preson new];
        
        [p setAge:20];
        [p test];
            
        return 0;
    }


    这样子我们就可以把我们想要的值存入进去啦, 但还有一个问题, 我把值存进去了, 那如果我想取出来呢?? 这又要怎么取? 继续往下看:

    Get方法:

    #import <Foundation/Foundation.h>
    
    @interface Preson : NSObject
    {
        int age;
    }
    - (void)test;
    - (void)setAge:(int)newAge;
    - (int)age;
    @end
    
    @implementation Preson
    - (void)test
    {
        NSLog(@"一个%d岁的人在走路.", age);
    }
    
    - (void)setAge:(int)newAge
    {
        age = newAge;
    }
    
    - (int)age
    {
        return age;
    }
    @end
    
    int main()
    {
        Preson *p = [Preson new];
        
        [p setAge:20];
        [p test];
        
        NSLog(@"一个%d岁的人在走路.", [p age]);
        
        return 0;
    }

    通过上面这个Get方法, 我们就可以取到我们存进去的值了~~~其实这个Set方法和Get方法是一种间接式的存取方法, 非常好用~~下面是它们的解释以及注意的事项:

    Set方法

    1.作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤

    2.命名规范:

    1> 方法名必须以set开头

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

    3> 返回值一定是void

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

    5> 形参的名称不能跟成员变量名一样


    Get方法

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

    2.命名规范:

    1> 肯定有返回值,返回值类型肯定与成员变量类型一致

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

    3> 不需要接收任何参数


  • 相关阅读:
    biji001
    公司内部openStack环境信息
    def
    CI调试
    一:Java之面向对象基本概念
    STL_算法_Heap算法(堆排)(精)
    IOS开发-经常使用站点集合
    【iOS开发-47】怎样下载iOS 7.1 Simulator 以及iOS 8离线的Documentation这些文件?
    设计模式简介
    how to deal with &quot;no such file error or diretory&quot; error for a new programmer in QT creator
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282856.html
Copyright © 2020-2023  润新知