Проверить, существует ли объект - Цель C - PullRequest
4 голосов
/ 22 июля 2011

Вместо того, чтобы воссоздавать объект снова и снова, есть ли способ проверить, существует ли объект в операторе if?

Спасибо!

Ответы [ 3 ]

9 голосов
/ 22 июля 2011

Если ваша ссылка на объект установлена ​​на nil, если объекта нет, тогда вы можете использовать

NSThing *myobj = nil;

if (!myobj)
    myobj = [[NSThing alloc] init];
[myobj message];
2 голосов
/ 22 июля 2011

Зависит от вашей ситуации.Вы можете использовать статическую переменную, например

- (void) doSomething
{
    static id foo = nil;
    if (! foo)
        foo = [[MyClass alloc] init];
    // Do something with foo.
}

При первом вызове -DoSomething будет создан экземпляр MyClass.Обратите внимание, что это не потокобезопасно.

Другой способ - использовать синглтон.Возможно, лучший способ - создать экземпляр объекта, когда приложение завершит запуск, и передать объект другим объектам, которые могут в нем нуждаться.

1 голос
/ 25 мая 2014

Поточный безопасный способ инициализации некоторого экземпляра с использованием GCD выглядит следующим образом:

static dispatch_once_t once;
dispatch_once(&once, ^{
    obj = [NSSomeThing new];
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...