ios 共享数据

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

你可能感兴趣的:(ios 共享数据)