06-成员变量的作用域

1.基本概念

局部变量、全局变量都有自己的作用域,成员变量也不例外。

2.类型

  • @public: 共有的,在任何地方都可以直接访问,访问无限制。
  • @protected: 受保护的,只能在当前类及其子类的@implementation实现中直接访问。
  • @private: 私有的,只能在当前类的@implementation实现中直接访问。
  • @package: 同一个“体系内”(框架)可以访问,最常用于框架类的实例变量

3.例题说明

以Person类及其子类Student类为例:

/*
 @public : 在任何地方都能直接访问对象的成员变量
 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
 @protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)
 @package : 只要处在同一个框架中,就能直接访问对象的成员变量
 
 @interface和@implementation中不能声明同名的成员变量
 */

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _number;
    
    @public // 在任何地方都能直接访问对象的成员变量
    int _age;
    
    
    @private  // 只能在当前类的对象方法中直接访问
    int _height;
    
    @protected // 能在当前类和子类的对象方法中直接访问
    int _weight;
    int _money;
}

- (void)setHeight:(int)height;
- (int)height;

- (void)test;
@end
Person.h
#import "Person.h"

@implementation Person
{
    int _aaa;// 默认就是私有
    
    @public
    int _bbb;
    // @implementation中不能定义和@interface中同名的成员变量
    // int _number;
}

- (void)setHeight:(int)height
{
    _height = height;
}

- (int)height
{
    return _height;
}

@end
Person.m
#import "Person.h"

@interface Student : Person
- (void)study;
@end
Student.h
#import "Student.h"

@implementation Student
- (void)study
{
    
    // _height = 10;      // 此处不可访问私有的_height
    [self setHeight:10]; // 调用[Person setHeight:10] 方法可以设置_height的值
    int h = [self height];  
    
    _weight = 100;  // @protected修饰  子类可以访问
}
@end
Student.m

 

 

 

 

posted on 2014-04-25 12:24  ゴルツの惠斌纳閣下  阅读(507)  评论(0编辑  收藏  举报