OGeek|极客世界-中国程序员成长平台

标题: objective-c - 使用单例类的全局变量 NSMuteableArray [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 17:10
标题: objective-c - 使用单例类的全局变量 NSMuteableArray

我在创建一种将集合传递给不同 View Controller 的好方法时遇到了麻烦。例如,我创建了一个名为 Message 的自定义类,其中包含一堆属性。我想要一个全局的 NSMutableArray 存储在一个名为消息的全局变量中,我可以添加到任何地方或从任何地方获取。 Stackoverflow 上的每个人都说不要使用你的 delagate 类来存储全局变量,所以我创建了一个名为 Shared 的单例类。在那里,我为 NSMutableArray 创建了一个名为 messages 的属性,如下所示:


@interface Shared : NSObject {

}

@property (nonatomic, retain) NSMutableArray *messages;

+(Shared *) sharedInstance;

@end

而我的 .h 文件是(重要的部分):


#import "Shared.h"
static Shared* sharedInstance;

@implementation Shared

@synthesize messages;

static Shared *sharedInstance = nil;

-(id) init {
    self = [super init];
    if (self != nil){

    }
    return self;
}

-(void) initializeSharedInstance {

}

+ (Shared *) sharedInstance{
    @synchronized(self) {
        if (sharedInstance == nil){
            sharedInstance = [[self alloc] init];
            [sharedInstance initializeSharedInstance];

        }
        return (sharedInstance);
    }
}

在我的另一个 View Controller 中,我首先导入“Shared.h”,然后试试这个:


[[Shared sharedInstance].messages addObject:m];

NSLog([NSString stringWithFormat"Shared messages = %@", [Shared sharedInstance].messages]);

它一直打印 null 而不是 m 个对象的集合。有什么想法吗?



Best Answer-推荐答案


你需要有一个静态变量。

在.h中:

@interface Shared : NSObject
{
    NSMutableArray *messages;
}

@property (nonatomic, retain) NSMutableArray *messages;

+ (Shared*)sharedInstance;

@end

在.m:

static Shared* sharedInstance;

@implementation Shared

@synthesize messages;


+ (Shared*)sharedInstance
{
    if ( !sharedInstance)
    {
        sharedInstance = [[Shared alloc] init];

    }
    return sharedInstance;
}

- (id)init
{
    self = [super init];
    if ( self )
    {
        messages = [[NSMutableArray alloc] init];
    }
    return self;
}

关于objective-c - 使用单例类的全局变量 NSMuteableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795997/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4