2012-05-29 58 views
0

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

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

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

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

谢谢!

+0

您是否考虑过创建一个引用第一个CCLayer并使用它访问第二个CCLayer中的属性的单例类? – WendiKidd

+0

你的意思是什么?“事情只是走下坡路”?如果您需要访问某个类的属性,则需要拥有该类的一个实例。您或者需要创建一个新的或者获得对已经创建的那个的引用。发布一些代码可以帮助我们帮助你。 –

+0

这意味着我的init方法中的所有内容都可以分配两次,这就是为什么我要弄清楚这一点。 –

回答

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]; 
+0

我在我的应用程序中有一个Singleton,但有那么多的变量和东西在那里,它变得凌乱。 Theres没有其他办法? –

+0

但是,那么你应该改变你的问题,并形成它,如果没有其他选择,而不是单身人士课程。 – Prine

+0

@iBradApps我会说这是最好的方法。单例(在这种情况下)的目的是保存很多类需要访问的变量。我敢肯定,他们*是*其他方式,但这工作:) – WendiKidd

2

我对Cocos知之甚少,但在Objective C中,您只需找到对该对象的引用即可访问其属性。

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

  • 传递对象的实例属性而你只需要进入到初始化或对象的另一制定者需要进行访问
  • 创建一个单一实例,并添加一个类的方法来访问这个
  • 创建地图(NSDictionary)或缓存(NSCache),可以让你通过你的程序分配给他们一个字符串键定位对象的实例。
相关问题