在iOS中释放共享实例的位置

时间:2013-04-09 16:35:40

标签: ios objective-c memory-management

我有一个共享实例(一个简单的数据控制器),在我的项目中我不使用ARC。

static ECOMDataController *sharedInstanse;
@implementation ECOMDataController
+(ECOMDataController *)sharedInstance
{
    return sharedInstanse;
}
-(id)init
{
    [self checkAndCreateDataFileIfExist];
    [self readAppFile];
    if (sharedInstanse)
        NSLog(@"The shared instance was created already.");
    sharedInstanse = self;
    return self;
}

我在其他方法中使用它:

- (void)viewDidLoad
{
    [super viewDidLoad];
    dataController = [ECOMDataController sharedInstance];
    [dataController readAppFile];
    [[self tableView] reloadData];
}

正如我从泄漏仪器中看到的那样 - 我这里有内存泄漏 - 我该如何释放数据控制器?哪个更好呢?

1 个答案:

答案 0 :(得分:4)

Rocky是对的:你不会释放一个单身人士。坦率地说,我根本不会使用该模式 - 除了AppDelegate或NSNotificationCenter等系统调用。模式存在很多陷阱......但这是我的观点(虽然我并不孤单)。

更重要的是,你为什么不使用ARC?绝对没有理由不这样做,原因很多。特别是对于一个新的开发人员来说,无论如何,当编译器为你做这件事时,对于内存管理都没有任何意义 - 并且会更好地完成它。你有足够的学习而不必担心保留计数!