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

被折叠的 条评论
为什么被折叠?



