可见度(一)

可见度

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;

}

原文地址:https://www.cnblogs.com/DevinSMR/p/5117783.html