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

标签 iphone cocoa nsstring global-variables

我定义了一个从其他 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/

相关文章:

iphone - 如何从经度/纬度获取附近的位置?

iphone - 拍摄 iOS 屏幕截图时裁剪状态栏的简单方法?

ios - UIScrollView 以编程方式在 Swift 中

objective-c - 当应用程序不是主应用程序时,小牛 NSUserNotification 不会发送

ios - 需要有关 NSString 的帮助

ios - 如何在 prepareForSegue 函数中搜索数据时获取 indexPath

xcode - 在扩展/合并核心数据模型的同时保留数据

ios - 如果今天是本月的最后一天,如何添加日期。?

objective-c - 为什么 NSString stringWithString 返回指向复制字符串的指针?

objective-c - 从 CString 初始化 NSString 的最快方法是什么?