全局变量调用仅在第一次工作

时间:2010-04-03 14:57:53

标签: iphone cocoa nsstring global-variables

我定义了一个从其他视图调用的全局变量,它首次运行但不跟随它,它与第一次调用的值保持一致!假设这是一个可可的基本问题,并且根据需要没有正确定义变量。谢谢你有任何想法来解决它。

声明:

@interface TableArchiveAppDelegate : NSObject <UIAppDelegate> {

    NSString        *varName;
}

@property (nonatomic, copy) NSString *varName;

然后.m文件中的相关行:

@synthesize varName;

-(void)test{

        varName = textField.text;
}

并从其他观点请求:

- (void)viewDidLoad {


    TableArchiveAppDelegate *mainDelegate = (TableArchiveAppDelegate *)[[UIApplication sharedApplication] delegate];

    name.text = mainDelegate.varName;

    [super viewDidLoad];
}

1 个答案:

答案 0 :(得分:1)

不确定我是否理解了这个问题,但是所提供的代码将导致varName属性保存调用-test方法时从textField.text设置的任何值。如果您从未为其分配不同的值,则会永久保留该初始值。

您的问题可能是您没有使用合成访问器。

此:

@property (nonatomic, copy) NSString *varName;

...创建一个合成访问器,通过创建另一个NSString实例并使用传递NSString的值填充它来复制传递给它的NSString对象。但是,这个:

varName = textField.text;

... varName分配给textField.Text中保存的字符串的地址。什么都没有复制。如果textField.text发生了变化,那么varName也是如此,因为两个iVar在同一个地址共享相同的字符串值。此外,当textField.text释放字符串时,它也将从varName中消失。

要复制textField.text的字符串,您需要使用:

self.varName = textField.text;

...唤起合成访问方法,里面有复制功能。

一般情况下,在引用类的自有属性时,应始终使用self.表示法,以确保它们得到正确保留/复制/释放等。当然,唯一的例外是如果您自己编写自定义访问器。