在不分配该类的情况下访问另一个类中的属性?

时间:2012-05-29 01:42:33

标签: objective-c ios properties allocation

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

无论如何,有没有办法可以在我的其他CCLayer类中访问该属性而无需再次分配它?

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

我已经将属性设置为我需要在没有分配技术的情况下在另一个类中访问它。

谢谢!

2 个答案:

答案 0 :(得分:2)

我对cocos知之甚少,但在Objective C中,你需要简单地找到对相关对象的引用来访问它的属性。

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

  • 将您需要访问的属性对象的实例传递给初始化程序或需要执行访问的对象的另一个setter
  • 创建单例实例并添加用于访问它的类方法
  • 创建一个地图(NSDictionary)或一个缓存(NSCache),可让您通过程序分配给它们的字符串键找到对象的实例。

答案 1 :(得分:0)

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

标题

#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];