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
#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
#import "Person.h" @interface Student : Person - (void)study; @end
#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
我就是我 是颜色不一样的烟火 天空开阔 要做最坚强的泡沫 我喜欢我 让蔷薇开出一种结果 孤独的沙漠里 一样盛放的赤裸裸