Есть ли аналог удаления класса для + initialize? - PullRequest
1 голос
/ 02 марта 2010

Я уверен, что это желаемое за действительное, но есть ли аналог +initialize, который будет автоматически вызываться после освобождения всех экземпляров класса?

Я выделяю одноэлементный объект в + initialize, который вызывается до того, как мой первый экземпляр класса будет выделен. Я хотел бы иметь возможность освободить объект, как только все экземпляры моего класса были освобождены. Однако, если мои объекты моего класса когда-либо будут перераспределены, мне потребуется +initialize для повторного вызова. Я подозреваю, что Какао не выполняет этот уровень управления классами, и, вероятно, мне нужно обернуть мой класс в класс менеджера классов ...

Я прав?

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Нет.

Я рекомендую просто не удалять синглтон, это почти бессмысленно, потому что это только один объект , который не займет много места.

Если вам действительно нужно это поведение, просто переопределите +alloc и -dealloc для подсчета текущих экземпляров. (или -finalize в среде сбора мусора).

0 голосов
/ 15 декабря 2011

Это хорошо работает только в ARC (с обнулением слабых ссылок, то есть iOS5), но хороший способ сделать что-то вроде этого - иметь методы класса для объекта (без дополнительного синглтона), т.е.

+ (id)someResource
{
    __weak static id resource;
    if (!obj)
    {
        return resource;
    }
    else
    {
        id tmpResource = [SomeResource resource];
        resource = tmpResource;
        return resource;
    }
}

+someResource всегда будет возвращать один и тот же объект, пока кто-либо еще удерживает resource, но как только никто его не использует, он уходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...