-1

我正在执行以下操作以初始化我的单例:

ChatDataController *box = [ChatDataController sharedInstance];

问题是我在不同的地方使用 *box,例如在这些方法中:

- (void) viewDidAppear:(BOOL)animated
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

有没有办法只需要初始化一次?以便 *box 可以在给定类中的任何方法中使用?

4

4 回答 4

1

将此代码放入您的ChatDataController

+ (ChatDataController *)sharedInstance
{
    static ChatDataController *object = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        object = [[ChatDataController alloc] init];
    });
    return object;
}
于 2013-08-01T11:37:09.440 回答
0

有没有办法只需要初始化一次?

如果ChatDataController是单例,它只能初始化一次。

[ChatDataController sharedInstance]应该总是返回相同的实例,并且只alloc] init]在它第一次被调用时返回。

如果正如您在其中一条评论中提到的那样,您已经有了单例,那么[ChatDataController sharedInstance]只要您需要共享实例,只需调用即可。无需将指向对象的指针存储在属性中。

于 2013-08-01T22:56:25.120 回答
-1

试试这个:- 在 .pch 文件中创建宏

第一个导入类

#import"ChatDataController.h"

然后创建宏(sharedInstance 必须是类方法)

#define box ([ChatDataController sharedInstance]) 

之后你可以在所有类中使用这个对象

于 2013-08-01T13:09:26.257 回答
-1

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html

在“创建单例实例”中

static MyGizmoClass *sharedGizmoManager = nil;

+ (MyGizmoClass*)sharedManager
{
    if (sharedGizmoManager == nil) {
        sharedGizmoManager = [[super allocWithZone:NULL] init];
    }
    return sharedGizmoManager;
}
于 2013-08-01T11:29:13.007 回答