【问题标题】:access an integer and string globally in iphone?在iphone中全局访问整数和字符串?
【发布时间】:2025-12-19 03:20:14
【问题描述】:

我想从一个类访问一个整数和一个字符串到所有其他类? 最好的方法是什么? 我想增加程序中任何地方的值,然后想在声明的类中更新它们....

知道如何实现这一点吗???

【问题讨论】:

    标签: objective-c iphone xcode


    【解决方案1】:

    这是一个关于 singletons 的问题(以及很好的答案)。

    您还可以按照 frankodwyer 的建议使用应用委托,并使用以下方式从任何地方访问它:

    id delegate = [[UIApplication sharedApplication] delegate];
    

    为了易于使用和类型安全,我使用这样的类别:

    // put his in your delegate header file
    @interface UIApplication(MyAppAdditions)
    + (MyAppDelegate*)sharedDelegate;
    @end
    
    // put his in your delegate implementation file
    @implementation UIApplication(MyAppAdditions)
    + (MyAppDelegate*)sharedDelegate {
        return (MyAppDelegate*)[[self sharedApplication] delegate];
    }
    @end
    

    现在您可以从任何地方访问您的应用委托:[UIApplication sharedDelegate]

    【讨论】:

    • +1 不错 - 我不知道有一个捷径可以让这样的代表。我一直在手动将其设置为views..doh的属性!
    • 我喜欢做类似的事情,但是用#define 代替,像这样:#define UIApp [UIApplication sharedApplication] #define UIAppDelegate ((MyAppDelegate*)[UIApp delegate])
    • 还有其他方法吗?意味着我有一个 uitable,它有 2 个部分。两个部分都包含多个行。两个部分都指两个不同的视图。我想在两个视图中增加一个整数。当我从表返回时,我想在数据库中更新
    • 请更详细地发布您的代码......如果我不想使用 appdelegate 怎么办。如何在其他类中创建全局变量并在不创建类实例的情况下访问它们
    【解决方案2】:

    您可以使应用程序委托的整数和字符串属性,并将对委托的引用传递给您的视图。我自己也做过这样的事情,但说实话,让应用程序委托对所有视图都可用是一种痛苦并且容易出错。

    或者(这可能更好),您可以声明一个单例类(谷歌单例模式)作为您的数据类之一,并让您的整数/字符串成为它的属性。然后,您可以从程序中的任何位置访问单例的 getter/setter。但是,如果您有多个线程,则需要格外小心,

    【讨论】: