在iOS中的何处释放共享实例

在iOS中的何处释放共享实例,ios,objective-c,memory-management,Ios,Objective C,Memory Management,我有一个共享实例(一个简单的数据控制器),在我的项目中我不使用ARC static ECOMDataController *sharedInstanse; @implementation ECOMDataController +(ECOMDataController *)sharedInstance { return sharedInstanse; } -(id)init { [self checkAndCreateDataFileIfExist]; [self read

我有一个共享实例(一个简单的数据控制器),在我的项目中我不使用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];
}

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

洛基是对的:你不会放弃单身。坦率地说,我根本不会使用这种模式——除了AppDelegate或NSNotificationCenter之类的系统调用。这种模式有很多缺陷……但这是我的观点(尽管我不是唯一一个这样做的人)


更重要的是,为什么不使用ARC?绝对没有理由不这样做,原因很多。特别是对于一个较新的开发人员来说,不管怎样,当编译器可以为您完成内存管理时,就没有必要为内存管理而大惊小怪了——而且它会做得更好。你有足够的时间去学习,而不必为保留计数而大惊小怪

洛基是对的:你不会放弃单身。坦率地说,我根本不会使用这种模式——除了AppDelegate或NSNotificationCenter之类的系统调用。这种模式有很多缺陷……但这是我的观点(尽管我不是唯一一个这样做的人)


更重要的是,为什么不使用ARC?绝对没有理由不这样做,原因很多。特别是对于一个较新的开发人员来说,不管怎样,当编译器可以为您完成内存管理时,就没有必要为内存管理而大惊小怪了——而且它会做得更好。你有足够的时间去学习,而不必为保留计数而大惊小怪

我觉得你好像想上单身班?单例类在应用程序运行的整个过程中都是活动的,所以您永远不会取消分配它。@rocky谢谢,我读了一些关于它的文章-那么这是正常的还是不正常的?我是iOS开发中的新成员-抱歉,如果我的问题太愚蠢了)什么是正常的还是不正常的?假设你的目标是创建一个单例,你需要搜索创建单例的正确方法。您的代码设置肯定不正确。例如,这不是一个正确的单例模式。如果这是所有的代码,它甚至不应该工作。看,我觉得你好像在尝试做一个单身班?单例类在应用程序运行的整个过程中都是活动的,所以您永远不会取消分配它。@rocky谢谢,我读了一些关于它的文章-那么这是正常的还是不正常的?我是iOS开发中的新成员-抱歉,如果我的问题太愚蠢了)什么是正常的还是不正常的?假设你的目标是创建一个单例,你需要搜索创建单例的正确方法。您的代码设置肯定不正确。例如,这不是一个正确的单例模式。如果这是所有的代码,它甚至不应该工作。看,谢谢你,这是我未来工作的一个测试项目,所以我从零开始理解iOS的发展。为了使应用程序与旧的iOS版本兼容,我必须使用内存管理。。现在我有很多漏洞。。我试图理解如何解决这种情况(我可以理解,我喜欢自己了解细节。不过,我意识到,使用ARC将旧代码转换为ARC相对容易。在XCode菜单中,“编辑器重构转换为ARC”我坚信,学习旧方法对你没有任何好处——ARC的处理能力甚至比最好的程序员手动操作都要好。不过,这只是我的意见。由你决定。@ShurupuS你可以使用ARC,并且仍然支持iOS 4.3。谢谢你,这是我未来工作的一个测试项目,所以我正在努力理解它从零开始的iOS开发。为了使应用程序与旧的iOS版本兼容,我必须使用内存管理。现在我有很多漏洞。我试图了解如何解决这种情况(我可以理解这一点,而且我喜欢自己了解细节。不过,我还是意识到,使用ARC将旧代码转换为ARC相对容易。在XCode菜单中,“编辑器重构转换为ARC”我坚信,学习旧方法对您毫无益处——ARC的处理能力甚至比最好的程序员手动操作都要好。不过,这只是我的意见。由您决定。@ShurupuS您可以使用ARC,但仍然支持iOS 4.3。