如何解决使用单例创建可由多个视图访问的数组
| 这是一个经典的问题。 我想从我的应用程序中的任何位置访问对象数组。我也想使用单例。我的问题是: 我在哪里实例化我的单例对象? 我在哪里实例化我的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
编辑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];
}
解决方法
像这样单身吗:
@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);
,
您使用惰性实例化,即返回您的单例对象的类方法。第一次调用此方法时,它将创建实例,此后所有其他时间,它将仅返回已可用的实例(保留在类变量中)。
我以为您单身人士的要点是持有这个阵列?您可以在单例的初始化程序中创建它,也可以在第一次需要它时懒惰地创建它。
在您的AppName-pefix.pch文件中,#import其类。此全局导入将在整个应用程序中可用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。