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

Eri*_*tto 1 iphone xcode singleton cocoa-touch objective-c

这是一个经典问题.

我想从我的应用程序中的任何位置访问一组对象.我也想用单身人士做这件事.我的问题是:

  1. 我在哪里实例化我的单例对象?
  2. 我在哪里实例化我的NSMutable对象数组?
  3. 如何在项目中的任何位置引用此数组?

所有代码和示例都非常感谢!

编辑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
Run Code Online (Sandbox Code Playgroud)

编辑2

这就是我试图使用我的单例对象将一个对象数组放在表格单元格中的方法.什么都没发生,表格单元格出现空白:(

- (id)init
{
    [super initWithStyle:UITableViewStylePlain];

    // bananas = [[NSMutableArray alloc] init];

    Singleton *mySingleton = [[Singleton alloc]init];
    mySingleton.bananas = [[NSMutableArray alloc]init];

    UIImage *imageA = [UIImage imageNamed:@"A.png"];
    UIImage *imageB = [UIImage imageNamed:@"B.png"];
    UIImage *imageC = [UIImage imageNamed:@"C.png"];

    Banana *yellowBanana = [[Banana alloc] initWithName:@"Yellow" description:@"Beautiful" weight:22.0 icon:imageA];
    Banana *greenBanana =  [[Banana alloc] initWithName:@"Green" description:@"Gorgeous" weight:12.0 icon:imageB];
    Banana *rottenBanana = [[Banana alloc] initWithName:@"Rotten" description:@"Ugly" weight:8.0 icon:imageC];

    [mySingleton.bananas addObject:yellowBanana];
    [mySingleton.bananas addObject:greenBanana];
    [mySingleton.bananas addObject:rottenBanana];
}
Run Code Online (Sandbox Code Playgroud)

Jan*_*ano 9

像你这样的单身人士:

@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
Run Code Online (Sandbox Code Playgroud)

单例在您第一次使用时初始化.您可以随时随地拨打电话:

NSLog(@"%@",[Singleton singleton].bananas);
Run Code Online (Sandbox Code Playgroud)