黑马程序员技术交流社区
标题:
static静态变量
[打印本页]
作者:
Meniny
时间:
2014-8-24 20:57
标题:
static静态变量
程序执行到方法内定义的变量时,系统会在栈上分配空间,方法在栈上分配的空间在此方法执行结束是会释放,但有时候我们却想让此变量的值保存到下一次调用时,该怎么办呢?能想到的第一个方法可能就是全局变量了,但是全局变量也有许多缺点,例如其作用域会导致变量的值不仅仅受控于此方法。鉴于这样的情况,OC为我们提供了static关键字,static关键字所修饰的变量叫做静态变量。
基于面向对象的角度,当我们需要一个数据对象为整个类(而非某个对象)服务而不破坏封装性时,就可以使用static关键字,这样的静态变量有这样几个优点:
(1)对于多个对象来说,静态变量是所有对象公有的,所以只需要存储一份即可,这样就节省了内存开销。
(2)静态变量的值对于每个对象都一样,但它的值是可以更新的。
(3)当某一对象对静态变量的值进行一次更新,所有对象就都可以访问新的值,提高了效率。
举个栗子:
Test.h:
// Test.h
#import <Foundation/Foundation.h>
@interface Test:NSObject{
}
+ (int)staticIntB;
@end
复制代码
Test.m:
// Test.m
#import "Test.h"
int intA = 10;
static int intB = 10;
@implementation Test
+ (int)staticIntB
{
intB += 1;
return IntB;
}
@end
复制代码
Main.m:
// Main.m
#import <Foundaton/Foundation.h>
#import "Test.h"
int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]l
NSLog(@"%i",[Test staticIntB]);
NSLog(@"%i",[Test staticIntB]);
[pool drain];
return 0;
}
复制代码
Console:
11
20
复制代码
可以看出,静态变量的值是可以更新的,只要对其值更新一次,则任何访问改变量的对象都将获得新的值。
除此之外,实例方法也可以使用静态变量。
作者:
庄得超
时间:
2014-8-24 21:38
其实,我觉得这样解释static静态变量的特点,会更易懂些。
作者:
庄得超
时间:
2014-8-24 21:40
static变量是在程序加载的时候就为之分配内存的,一直到程序结束,而不像普通变量那样函数执行一次分配一次。
作者:
王绍明
时间:
2014-8-25 08:43
STATIC只是一个声明周期 控制循环生命周期
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2