美文网首页八天学会OC
第03天OC语言(12):实例变量修饰符

第03天OC语言(12):实例变量修饰符

作者: liyuhong | 来源:发表于2017-07-20 16:10 被阅读8次
    • 不要等到明天,明天太遥远,今天就行动。
    须读:看完该文章你能做什么?

    实例变量修饰符(四种状态 \公开\私有\受保护\框架之间)

    学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)

    什么是变量

    注:(小白直接上手)

    一、本章笔记
     实例变量修饰符
        实例变量的修饰符作用域: 从出现的位置开始, 一直知道下一个修饰符出现
        如果没有遇到下一个实例变量修饰符,那么就会修饰后面所有的实例变量
     @public
        可以在其他类中访问
        也可以在本类中访问
        子类? 可以在子类中访问父类的成员变量
     
     @private
        不可以在其他类中访问
        也可以在本类中访问
        子类? 不可以在子类中访问父类的成员变量
     
     @protected
        不可以在其他类中访问
        也可以在本类中访问
        子类? 可以在子类中访问父类的成员变量
        注意: 默认情况下所有的成员属性 都是 protected
     
     @package (没有学习到框架,当前不需要掌握)
        子类? 可以在子类中访问父类的成员变量
        > 介于 public 和 private之间的
        如果是 在其他包中访问 那么就是 private的
        如果是 在当前代码的包中 访问 就是public的
     
     如果A框架有一个类 叫做 LYHClass里面的成员变量都是 package的
     那么在D框架中 都不能访问LYHClass里面的成员变量
    
    二、code
    main.m
    #pragma mark 12-实例变量修饰符
    
    #pragma mark - 代码
    #import <Foundation/Foundation.h>
    #pragma mark 类
    #import "Person.h"
    #import "Student.h"
    #pragma mark - main函数
    int main(int argc, const char * argv[])
    {
        Person *p = [Person new];
        p->_age = 25;
        p->_name = @"lyh";
    //    p->_height = 1.71; // @private    外界不能访问
    //    p->_weight = 65.0; // @protected  外界不能访问
        p->_email = @"163.com";
    
        
        Student *s = [Student new];
        NSLog(@"---");
        return 0;
    }
    
    Person
    >>>.h
    #import <Foundation/Foundation.h>
    
    /*
    实例变量修饰符
        实例变量的修饰符作用域: 从出现的位置开始, 一直知道下一个修饰符出现
        如果没有遇到下一个实例变量修饰符,那么就会修饰后面所有的实例变量
     @public
        可以在其他类中访问
        也可以在本类中访问
        子类? 可以在子类中访问父类的成员变量
     
     @private
        不可以在其他类中访问
        也可以在本类中访问
        子类? 不可以在子类中访问父类的成员变量
    
     @protected
         不可以在其他类中访问
         也可以在本类中访问
        子类? 可以在子类中访问父类的成员变量
     注意: 默认情况下所有的成员属性 都是 protected
     
     @package (没有学习到框架,当前不需要掌握)
        子类? 可以在子类中访问父类的成员变量
        > 介于 public 和 private之间的
        如果是 在其他包中访问 那么就是 private的
        如果是 在当前代码的包中 访问 就是public的
     
        如果A框架有一个类 叫做 LYHClass里面的成员变量都是 package的
        那么在D框架中 都不能访问LYHClass里面的成员变量 
     */
    
    @interface Person : NSObject
    {
        @public
        int _age;
        NSString *_name;
        @private
        double _height;
        @protected
        double _weight;
        NSString *_tel;
        @package
        NSString *_email;
    
    }
    
    @end
    >>>.m
    #import "Person.h"
    
    @implementation Person
    
    - (void)test
    {
        NSLog(@"_age = %i",_age);
        NSLog(@"_height = %@",_name);
        NSLog(@"_height = %f",_height);
        NSLog(@"_weight = %f",_weight);
        NSLog(@"_tel = %@",_tel);
        NSLog(@"_email = %@",_email);
    }
    @end
    
    
    Student
    >>>.h
    #import <Foundation/Foundation.h>
    #import "Person.h"
    @interface Student : Person
    
    @end
    >>>.m
    #import "Student.h"
    
    @implementation Student
    
    - (void)test
    {
        NSLog(@"_age = %i",_age);
        NSLog(@"_height = %@",_name);
    //    NSLog(@"_height = %f",_height); @private
        NSLog(@"_weight = %f",_weight);
        NSLog(@"_tel = %@",_tel);
        NSLog(@"_email = %@",_email);
    }
    
    @end
    

    类的实例变量(属性、成员变量)默认都是protected的


    image.png

    相关文章

      网友评论

        本文标题:第03天OC语言(12):实例变量修饰符

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