gpt4 book ai didi

iphone - 全局变量调用仅在第一次有效

转载 作者:行者123 更新时间:2023-12-03 17:17:33 29 4
gpt4 key购买 nike

我定义了一个从其他 View 调用的全局变量,它是第一次工作,但不是后续的,它与第一次调用的值保持一致!假设这是 cocoa 的一个基本问题,并且变量没有根据其需要正确定义。感谢您提供任何解决问题的想法。

声明:

@interface TableArchiveAppDelegate : NSObject <UIAppDelegate> {

NSString *varName;
}

@property (nonatomic, copy) NSString *varName;

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

@synthesize varName;

-(void)test{

varName = textField.text;
}

以及来自另一个 View 的请求:

- (void)viewDidLoad {


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

name.text = mainDelegate.varName;

[super viewDidLoad];
}

最佳答案

不确定我是否理解这个问题,但所提供的代码将导致 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. 表示法,以确保它们得到正确的保留/复制/释放等。当然,唯一的异常(exception)是如果您编写自己的自定义访问器。

关于iphone - 全局变量调用仅在第一次有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571586/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com