2013-04-18 2 views
0

У меня есть статическая библиотека, которая содержит метод класса Singleton, я вызываю его в функции (IBAction), в первый раз, когда я вызываю это нормально, но второй сбой и отсутствие информации об ошибке, метод одноэлементного класса следующим образом:Метод Singleton класса в статической библиотеке в iOS

+(myClass *)sharedClient{ 
    static myClass *_sharedClient = nil; 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken, ^{ 
     _sharedClient = [[[myClass alloc] init] autorelease]; 

    }); 

    return _sharedClient; 
    } 

и я называю это следующим образом:

-(IBAction) action 

    { 
     [myClass sharedClient] action]; 
    } 
+0

'no error information' - Вы уверены? – CAMOBAP

ответ

3

Вы посылаете autorelease на новый объект внутри раздельный аксессор. В следующий раз, когда появится пул автозапуска, общий объект будет освобожден и затем уничтожен. Просто удалите авторекламу, и авария должна исправить себя.

+0

действительно работает, но я не использую ARC, когда я должен его отпустить? – Henry

+0

Как его (нестрогий) одноэлементный аксессуар ... вы его не выпускаете. Вот почему нужно быть предельно осторожным в использовании шаблона singleton - если общему объекту оказывается слишком много памяти, вам может потребоваться переосмыслить дизайн вашего приложения, чтобы использовать менее строгий подход. Тем не менее, если вы не столкнетесь с этой проблемой. –