【问题标题】:Access properties in another class without allocating that class?访问另一个类中的属性而不分配该类?
【发布时间】:2012-05-29 01:42:33
【问题描述】:

目前我想改进我的应用程序的结构,我想做的是访问我在另一个类中的第一个 CCLayer (Cocos2D) 类中创建的属性。现在显然我可以分配它然后我可以访问它但是然后调用 init 方法并且事情从那里走下坡路。

无论如何,有什么方法可以让我访问其他 CCLayer 类中的属性而无需再次分配它?

另外,我的应用程序中已经有一个 Singleton,但其中有很多变量,它变得如此混乱。除了使用 Singleton 还有其他方法吗?

我已经设置了属性,只是我需要在另一个类中访问它而无需分配技术。

谢谢!

【问题讨论】:

  • 您是否考虑过创建一个引用第一个 CCLayer 的单例类并使用它来访问第二个 CCLayer 中的属性?
  • 你所说的“事情只是走下坡路”到底是什么意思?如果您需要访问一个类的属性,您需要拥有该类的一个实例。您要么需要创建一个新的,要么获取对您已经创建的那个的引用。发布一些代码可以帮助我们帮助您。
  • 这意味着我的 init 方法中的所有内容都可能被分配两次,这就是我想弄清楚这一点的原因。
  • @WendiKidd 我现在正在这样做!但是每当我做类似 gameLayer.myBool (其中 myBool 是属性)之类的事情时,它永远不会找到那个 BOOL!并提出警告

标签: objective-c ios properties allocation


【解决方案1】:

我对 cocos 了解不多,但是在 Objective C 中,您需要简单地找到对相关对象的引用来访问它的属性。

有几种方法可以从其他对象访问对象:

  • 将您需要访问其属性的对象的实例传递给需要执行访问的初始化器或对象的另一个设置器
  • 创建一个单例实例并添加一个类方法来访问它
  • 创建映射 (NSDictionary) 或缓存 (NSCache),让您可以通过程序分配给对象的字符串键定位对象实例。

【讨论】:

    【解决方案2】:

    你需要的是一个单例类。我通常是这样做的:

    标题

    #import <Foundation/Foundation.h>
    
    @interface Configuration : NSObject {
        NSString *serverPath;
        NSString *configurationServicePath;
    }
    
    // Single instance
    + (Configuration *) configuration;
    

    实施

    @implementation Configuration
    @synthesize serverPath, configurationServicePath;
    
    - (id)init {
        self = [super init];
        if (self) {
          // init
        }
    
        return self;
    }
    
    
    + (Configuration *) configuration
    {
        static Configuration *configuration;
    
        @synchronized(self)
        {
            if (!configuration) {
                configuration = [[Configuration alloc] init];
            }   
    
            return configuration;
        }
    }
    

    因此,每次您使用您的类时,您都可以使用以下行获取实例(如果已经有一个,如果没有,则只创建一次实例):

    Configuration configuration = [Configuration configuration];
    

    【讨论】:

    • 我的应用程序中确实有一个 Singleton,但是那里有太多变量和东西,它变得一团糟。没有别的办法吗?
    • 但是你应该改变你的问题并形成它,如果除了单例类没有其他选择。
    • @iBradApps 我会说这是最好的方法。单例(在这种情况下)的目的是保存许多类需要访问的变量。我敢肯定他们是其他方式,但这有效:)
    • @iBradApps 如果您愿意,您也可以拥有多个单例,以保持事物整洁——根据它们的用途(以及哪些类需要它们的可见性)来分解它们。没有理由限制您的应用程序中只有一个。我的意思是,是的,当然还有其他方法——您可以将其设为全局变量。它会编译。您是否应该是另一个问题。 ;) 但无论如何——就像我在确定还有其他解决方案之前所说的那样,通常有很多解决方案可以解决任何问题。所以希望有人会为你提出另一个想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多