2013-04-09 2 views
0

У меня есть общий экземпляр (простой контроллер данных), и в моем проекте я не использую ARC.Где выпустить общий экземпляр в iOS

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]; 
} 

Как я могу видеть из инструмента утечки - У меня есть утечка памяти здесь - то, что я должен сделать, чтобы освободить контроллер данных ? И где лучше сделать это?

+6

Звучит для меня так, как будто вы пытаетесь создать класс одноэлементного? Одиночные классы живы в течение всего времени работы вашего приложения, поэтому вы никогда не освобождаете его. – rocky

+0

@rocky Спасибо, я немного прочитал об этом - так это нормально или нет? Я, новый, в разработке iOS - извините, если мои вопросы слишком глупы) – ShurupuS

+0

Является ли это нормальным или нет? – rocky

ответ

4

Рокки прав: вы не освободите синглтон. Честно говоря, я бы не использовал этот шаблон вообще, за исключением системных вызовов, таких как AppDelegate или NSNotificationCenter. Есть много подводных камней с рисунком ... но это мое мнение (хотя я не одинок в этом).

Что еще более важно, почему вы не используете ARC? Нет абсолютно никаких оснований для этого и многих причин для этого. В частности, для более нового разработчика, нет смысла суетиться в отношении управления памятью, когда компилятор сделает это за вас, во всяком случае - и будет лучше работать над этим. У вас достаточно, чтобы учиться, не судорожно задерживая счет!

+0

Спасибо, это тестовый проект для моей будущей работы, поэтому я правду понять развитие iOS из нулевой точки. И чтобы приложение совместимо со старыми версиями iOS, я должен использовать управление памятью. Теперь у меня большое количество утечек. И я пытаюсь понять, как я могу разрешить эту ситуацию ( – ShurupuS

+0

Я могу это понять, и мне нравится зная сами гайки и болты. Тем не менее, понимайте, что конвертировать старый код в ARC довольно легко. В меню XCode «Редактор-Рефактор-Конвертировать в ARC» доставит вам большую часть пути! что вам нечего выиграть, изучая старый путь - ARC справляется с этим лучше, чем даже лучшие программисты будут вручную. Просто мое мнение, однако. До вас. –

+1

@ShurupuS Вы можете использовать ARC и по-прежнему поддерживать iOS 4.3 , – rmaddy

Смежные вопросы