zoukankan      html  css  js  c++  java
  • 可见度(一)

    可见度

    OC的实例变量可见度有四种:@package,@public , @protected, @private。

    因为package比较少用,这里先不提。那么就剩下三种了。

    类内:在类接口和实现以内。

    类外:在类接口和实现之外。

    在类外如果想直接使用实例变量,必须使用@public来修饰可见度,否则不能直接操作实例变量。

    @public

    在类内和类外都可以直接使用,并且可以被继承。虽然这样的可见度,对我们来说很方便,但是对程序内部细节的保护没有一点帮助,因此,@public最好不用。

    @protected

    如果在声明成员变量的时候,没有对其使用可见度描述,则这些实例变量的默认可见度是protected的。

    protected,在类外不能使用,在类内可以使用,可以被继承(这是与private的区别)。

    @private

    私有可见度,描述的实例变量,在类内可以使用,在类外不能使用,并且不能被继承。

    例子:

    Student.h文件

    #import <Foundation/Foundation.h>

     

    @interface Person : NSObject{

       

        //2015年04月14日10:05:55 北京

       

        //实例变量指的是能否看见实例变量。

       

        //类外:在类接口和实现以外,必须是@public

       

        //类内:在类接口和实现以内,

       

        //如果想要在类外使用实例变量,必须描述为@public,否则无法直接使用。

       

       

        @public

        //禁止使用

        //@public,类内类外都可以直接使用

        //可以被继承

        NSString *_name;

       

        //如果没有可见度描述,默认是受保护的,即@protected。

        @protected

        //类外不能使用

        //类内可以使用

        //可以被继承

        NSString *_sex;

       

       

        @private

        //类外不能使用

        //类内可以使用

        //不能被继承

        NSString *_num;

       

        //可见度描述是可以写多次的。

        //但是尽量不要写多次。

        @public

        NSString *_color;

      

    }

    - (void) sayHi;

     

    @end

    Student.m文件

    #import "Person.h"

     

    @implementation Person

     

    - (void) sayHi{

       

        NSLog(@"%@",_name);

        NSLog(@"%@",_sex);

        NSLog(@"%@",_name);

    }

    @end

    main.m文件

    #import <Foundation/Foundation.h>

    #import "Person.h"

     

    int main(int argc, const char * argv[])

    {

        @autoreleasepool {

           

            Person *p1 = [[Person alloc]init];

           

            p1->_name = @"123";

    //        p1->_num = @"123";//私有的,报错

    //        p1->_sex = @"123";//保护的,报错

           

        }

        return 0;

    }

  • 相关阅读:
    【脑图】iOS的Crash分类和捕获
    Ruby03
    Ruby02
    Ruby01
    如何快速把一个十进制数转换为二进制?
    iOS
    互联网协议基本知识
    XCBB
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5117783.html
Copyright © 2011-2022 走看看