Iphone 使用单例创建可由多个视图访问的数组

Iphone 使用单例创建可由多个视图访问的数组,iphone,objective-c,xcode,cocoa-touch,singleton,Iphone,Objective C,Xcode,Cocoa Touch,Singleton,这是一个典型的问题 我想从我的应用程序中的任何位置访问对象数组。我还想使用单例来实现这一点。我的问题是: 在哪里实例化我的单例对象 我在哪里实例化我的NSMutable对象数组 如何从项目中的任何位置引用此阵列 非常感谢所有代码和示例 编辑1 这就是我目前所拥有的。我不知道如何正确、一致地访问这些香蕉: #import <Foundation/Foundation.h> @interface Singleton : NSObject { NSMutableArray *ba

这是一个典型的问题

我想从我的应用程序中的任何位置访问对象数组。我还想使用单例来实现这一点。我的问题是:

  • 在哪里实例化我的单例对象
  • 我在哪里实例化我的NSMutable对象数组
  • 如何从项目中的任何位置引用此阵列
  • 非常感谢所有代码和示例

    编辑1

    这就是我目前所拥有的。我不知道如何正确、一致地访问这些香蕉:

    #import <Foundation/Foundation.h>
    
    @interface Singleton : NSObject {
        NSMutableArray *bananas;
    }
    
    @property (nonatomic, retain) NSMutableArray *bananas;
    
    @end
    
    
    #import "Singleton.h"
    
    static Singleton *mySingleton;
    
    @implementation Singleton
    
    @synthesize bananas;
    
    #pragma mark SingletonDescption stuff
    
    + (Singleton *)mySingleton
    {
        if(!mySingleton){
            mySingleton = [[Singleton alloc]init];
        }
    
        return mySingleton;
    }
    
    + (id)allocWithZone:(NSZone *)zone
    {
        if (!mySingleton) {
            mySingleton = [super allocWithZone:zone];
            return mySingleton;
        } else {
            return nil;
        }
    }
    
    - (id)copyWithZone:(NSZone*) zone
    {
        return self;
    }
    
    - (void)release
    {
        // NO OP
    }
    
    @end
    
  • 使用惰性实例化,即返回单例对象的类方法。第一次调用此方法时,它会创建实例,此后的所有其他时间,它只返回已经可用的实例(保留在类变量中)

  • 我以为你的单身汉的目的就是要持有这个阵列?您可以在singleton的初始值设定项中创建它,也可以在第一次需要它时惰性地创建它

  • 在AppName-pefix.pch文件中,导入其类。此全局导入将在整个应用程序中可用

  • 使用惰性实例化,即返回单例对象的类方法。第一次调用此方法时,它会创建实例,此后的所有其他时间,它只返回已经可用的实例(保留在类变量中)

  • 我以为你的单身汉的目的就是要持有这个阵列?您可以在singleton的初始值设定项中创建它,也可以在第一次需要它时惰性地创建它

  • 在AppName-pefix.pch文件中,导入其类。此全局导入将在整个应用程序中可用


  • 你的单身汉喜欢这样:

    @interface Singleton : NSObject
    @property (nonatomic, retain) NSMutableArray *bananas;
    +(Singleton*)singleton;
    @end
    @implementation Singleton
    @synthesize bananas;
    +(Singleton *)singleton {
        static dispatch_once_t pred;
        static Singleton *shared = nil;
        dispatch_once(&pred, ^{
            shared = [[Singleton alloc] init];
            shared.bananas = [[NSMutableArray alloc]init];
        });
        return shared;
    }
    @end
    
    第一次使用单例时,它就被初始化了。您可以随时从任何地方调用它:

    NSLog(@"%@",[Singleton singleton].bananas);
    

    你的单身汉喜欢这样:

    @interface Singleton : NSObject
    @property (nonatomic, retain) NSMutableArray *bananas;
    +(Singleton*)singleton;
    @end
    @implementation Singleton
    @synthesize bananas;
    +(Singleton *)singleton {
        static dispatch_once_t pred;
        static Singleton *shared = nil;
        dispatch_once(&pred, ^{
            shared = [[Singleton alloc] init];
            shared.bananas = [[NSMutableArray alloc]init];
        });
        return shared;
    }
    @end
    
    第一次使用单例时,它就被初始化了。您可以随时从任何地方调用它:

    NSLog(@"%@",[Singleton singleton].bananas);
    

    @尼克,对于入会者来说,这可能看起来是同一个问题,但事实并非如此。我看了那个问题,仍然感到困惑。但是谢谢:)这怎么不是同一个问题呢?@Nick,这看起来像是同一个问题,但事实并非如此。我看了那个问题,仍然感到困惑。但是谢谢:)这怎么不是同一个问题呢?这似乎是一个好的开始,但我对语法还是有点不清楚。你能看一下我刚刚发布的代码,并指出我将如何调用数组吗?谢谢:)@Eric Brotto恐怕我不明白你的问题,或者还有什么更好的地方。看来你的单例生成工作进行得很顺利。@Eric Brotto在你的
    mySingleton
    方法中,确保初始化数组。或者为数组编写自己的getter,而不是合成它,这样您可以懒洋洋地创建数组。@fzwo,我正试图使用self.bananas=[[NSMutableArray alloc]init]初始化数组,但没有这样的运气。如果我要你帮我解释一下,我很抱歉:(@Eric Brotto还有,你没有把你的单身作为单身!使用
    singleton*mySingleton=[singleton mySingleton]
    。然后想想更好的类和方法名!调用你的单例类
    BananaBunch
    ,它的单例getter
    defaultBunch
    ,或者类似的东西怎么样?你的代码会是:
    BananaBunch*myBunch=[BananaBunch defaultBunch];[myBunch addBanana:yellowBanana]
    这似乎是一个好的开始,但我对语法仍有点不清楚。你能看一下我刚刚发布的代码,也许能指出我将如何调用数组吗?谢谢:)@Eric Brotto恐怕我不明白你的问题,或者还有什么更好的地方。看来你的单例生成工作进行得很顺利。@Eric Brotto在你的
    mySingleton
    方法中,确保初始化数组。或者为数组编写自己的getter,而不是合成它,这样您可以懒洋洋地创建数组。@fzwo,我正试图使用self.bananas=[[NSMutableArray alloc]init]初始化数组,但没有这样的运气。如果我要你帮我解释一下,我很抱歉:(@Eric Brotto还有,你没有把你的单身作为单身!使用
    singleton*mySingleton=[singleton mySingleton]
    。想想更好的类和方法名!调用你的singleton类
    BananaBunch
    ,它的singleton getter
    defaultBunch
    ,或者类似的东西怎么样?你的代码会读成:
    BananaBunch*myBunch=[BananaBunch defaultBunch];[myBunch addBanana:yellowBanana];