您的位置:首页 > 移动开发 > IOS开发

IOS开发之---static变量

2013-11-03 18:09 218 查看
Objective-C 支持全局变量

主要有两种实现方式:

(1)第一种和C/C++中的一样, 使用"extern"关键词;

(2)另外一种就是使用单例实现。
(比如我们经常会把一个变量放在AppDelegate里面作为全局变量来访问, 其中AppDelegate就是一个单例类)

在Objective-C中如何实现像C++中那样的静态成员变量呢?

你需要做的是在一个类A的implementation(.m或者.mm)文件中定义一个static变量,然后为A类定义静态成员函数(class method,也就是类方法)来操作该变量。

这样在其它类中你就不需要创建A类的实例来对static变量进行访问。虽然该static变量并不是A类的静态成员变量,但是也算达到了同样的效果。static变量的作用域被限制在单一的文件中。代码可以如下所示:

//example.h
@interface Example : NSObject {

}
- (id)init;
+(int)instanceCount;
@end


//example.m
#import "example.h"
static int count;
@implementation Example
-(id)init{
self = [super init];
if(nil!=self){
count+=1;
}
return self;
}
+(int)instanceCount{
return count;
}
@end


上面的例子中你就可以通过[Example instanceCount]对静态变量count进行访问,无须创建实例。

MyClass.h

警告: static 写在interface外面编译是没有错误的,但是编译器会报警告,这么说这样的写法是不被编辑器认可的。

错误:static 写在interface里面会直接报错,显然这样的语法是不被认可的。

+(void) addCount; 各位朋友们注意一下这法方法前面的+号。 它的意思是标致这个方法为静态方法,标志+号后不用创建这个对象通过类名可以直接调用这个静态方法。 而之前方法前用过的-号,标志-号后的方法必须通过本类的对象或者在本来中才可以使用。

#import <Foundation/Foundation.h>
//警告
//static int sCount ;
@interface MyClass : NSObject
//static int sCount;
}
+(void) addCount;
@end


MyClass.m

static关键字声明的变量必须放在implementation外面,或者方法中,如果不为它赋值默认为0,

它只在程序开机初始化一次。

+(void)addCount 因为标识了+号,所以这个方法无需使用这个类的对象调用。

直接使用类名方可调用这个方法。

#import "MyClass.h"

static int sCount = 100;

@implementation MyClass

+(void)addCount

{

sCount ++;

NSLog(@"静态整型变量的值为:%d", sCount);

}

@end
http://www.cocoachina.com/bbs/simple/?t60419.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: