Objective C2.0学习(十五 作用域)

本文介绍了不同类型的变量作用域,包括@protected、@private、@public和@package,并解释了它们如何影响类及其子类中变量的可见性。此外,还讨论了全局变量、外部变量和静态变量的概念。
几个常见的不同变量作用域:
@protected:
这个指令后面的实例变量可被类及任何子类中定义的方法直接访问。这个是默认情况

@private:
这个指令后面的实例变量可被定义在该类的方法直接访问,但不能被子类中定义的方法直接访问

@public:
这个指令后面的实例变量可悲该类中定义的方法直接访问,也可被其他类或者模块中定义的方法访问

@package:
对于64位图像,可以在实现该类的图像的任何地方访问这个实例变量。(啥意思?)

一个Printer类,包含两个私有实例变量pageCount和tonerLevel,且只能在该类中被访问
Printer.m
@interface Printer: NSObject
{
@private
int pageCount;
int tonerLevel;

@protected
//other instance variables
}

...
@end

外部变量:
如果在程序开始处(所有方法,类定义和函数定义之外)编写一下语句:
int gMoveNumber = 0;
那么这个模块中的任何位置都可以引用到该值。这种情况,該值就是全局变量,按照惯例,用小写的g作为全局变量的首字母。
这样的设置是的其他文件也可以同样访问gMoveNumber的值。不仅是全局变量,也是外部全局变量。

外部变量是可悲其他任何方法货函数访问和改变其值的变量。在需要访问外部变量的模块中。变量声明都一样。只需要在声明前加上关键字extern。就告诉系统,要访问其他文件中定义的全局变量。
extern int gMoveNumber;

main.m文件:
#import "Foo.h"
int gGlobalVar = 5; 全局变量
int main (int argc, char *argc[])
{
...
Foo *myFoo = [[Foo alloc] init];
NSLog (@"%i", gGlobalVar);
[myFoo setgGlobalVar: 100];
NSLog (@"%i", gGlobalVal);
..
}

-(void) setgGlobalVar: (int) val
{
extern int gGlobalVar;
gGlobalVar = val;
}

在前面程序中,gGlobalVar定义为全局变量,因此任何方法只要正确滴使用extern声明,都可以访问它。

结果是:
5
100

这就证明了方法setgGlobalVar:可以访问和改变外部变量gGlobalVar的值。

静态变量:
前面琐事的例子与数据封装原则以及良好的面向对象编程技术违背。然而,可能需要下面这种变量:他们的值在经过不同的方法调用时是共享的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值