xcode中用静态成员函数来代替全局变量
objective c支持全局变量,用法和c/c++中相同。
但是当我们要求如下时:如在A类里面定义的变量,在B类中不需要创建A类的实例就可访问和修改。
用全局变量来实现并不合适。此时我们需要做的是在A类的implementation文件中定义一 个static变量,
然后为A类定义静态成员函数(class method)来操作该变量。这样在其它类中你就不需要创建A类的
实例来对static变量进行访问。虽然该static变量并不是A类的静态成员变量, 但是也算达到了同样的效果。
为什么不定义全局变量,关键就在于变量的作用域,static变量的作用域被限制在单一的文件中。
#import <Foundation/Foundation.h>
extern int num; //全局变量 作用域 在全局
@interface MyClass : NSObject
{
}
-(void) saySomeThing;
+(void) printName;
+(void) setMyName:(NSString *) s;
@end
#import "MyClass.h"
@implementation MyClass
static NSString *name=@"xx"; // 这个name 只在。m文件中有效的! 在外界通过类方法来对name
操作。类似静态成员变量的效果。
int num=10;
-(void) saySomeThing
{
NSLog(@"name is ->%@",name);
NSLog(@"num is ->%d",num);
}
+(void) printName
{
NSLog(@"name is %@",name);
}
+(void) setMyName:(NSString *) s
{
if(name!=s)
{
[name release];
name=[s retain];
}
}
@end
//
[MyClass setMyName:@"xiaosong"];
[MyClass printName];
MyClass *one=[[MyClass alloc]init];
[one saySomeThing];
[MyClass setMyName:@"naan"];
[MyClass printName];
MyClass *two=[[MyClass alloc]init];
myNum=200;
[two saySomeThing];
//
2013-01-09 16:12:14.599 MyClassTest[2947:c07] name is xiaosong
2013-01-09 16:12:14.600 MyClassTest[2947:c07] hello in myClass! ... ...xiaosong
2013-01-09 16:12:14.600 MyClassTest[2947:c07] myNum -> 10
2013-01-09 16:12:14.601 MyClassTest[2947:c07] name is naan
2013-01-09 16:12:14.601 MyClassTest[2947:c07] hello in myClass! ... ...naan
2013-01-09 16:12:14.601 MyClassTest[2947:c07] myNum -> 200