#ios #static #singleton
#iOS #статический #синглтон
Вопрос:
Я разрабатываю статическую библиотеку и создаю свою библиотеку lib.a.
Когда я использую эту библиотеку в проекте iOS (приложение для iPhone, созданное с флагами -ObjC и -all_load для компоновщика), я получаю эту ошибку во время выполнения :
unrecognized selector sent to instance
Эта ошибка возникает, когда я пытаюсь вызвать метод класса.
(MyObject *) GetSingleton;
Для информации, я не получаю ошибку при вызове метода экземпляра.
- (void) Log;
У вас есть представление о проблеме?
Комментарии:
1. Как именно вы вызываете синглтон?
2. Я вызываю это с помощью этой строки кода :
[[MyObject GetSingleton] Log];
3. Вы выделяете и инициализируете экземпляр для синглтона?
4. Да, это реализация getSingleton :
if (_singleton == nil) { _singleton = [[super allocWithZone:NULL] init]; }
5. Дополнительная информация о проблеме будет полезна. Предоставьте больший фрагмент кода (лучше, если это будет заголовок и реализация вашего синглтона), трассировку стека с аварийным завершением и полную ошибку с указанием имени метода. Спасибо 😉
Ответ №1:
Когда вы создадите свой синглтон, попробуйте это:
(MyObject *)GetSingleton {
static MyObject* singletonInstance;
@synchronized(self) {
if (!singletonInstance)
singletonInstance = [[MyObject alloc] init];
}
return singletonInstance;
}
Надеюсь, это поможет.
Комментарии:
1. Спасибо за ответ, но это не работает, все та же ошибка
2. Если я не использую статическую библиотеку и импортирую свой одноэлементный класс в свой проект, проблем нет! У тебя есть идея?
Ответ №2:
Хм, я исправил проблему, повторно создав свой проект!
Я не знаю почему, в моем проекте была сделана неправильная ссылка для метода класса, а не для метода экземпляра.
Теперь, с новым проектом и ссылкой на мою статическую библиотеку, во время выполнения все в порядке.
Возможно, это была проблема из-за множества созданных мной статических библиотек, вероятно, с плохим кэшем или зависимостями…
Спасибо разработчикам за ваши ответы!