2010-10-07 4 views
0

Я думал, что объект, возвращенный NSMutableDictionary dictionaryWithCapacity:, будет выпущен, когда пул автоопределения в main.m будет слит. Вместо этого, когда я назначаю это члену экземпляра в -init, я нахожу, что объект длится столько же времени, сколько и -init-вызов.Срок службы [NSMutableDictionary dictionaryWithCapacity: n]

Что такое управление выпуском объекта, возвращаемого NSMutableDictionary dictionaryWithCapacity:?

Чтобы еще больше узнать о том, что происходит здесь, я обнаружил, что когда я назначаю объект пользовательского класса, созданного конструктором удобства, члену экземпляра в init, этот экземпляр все еще «жив» в (например) touchBegan : ...

ответ

2

Вообще говоря, API, подобные этому, возвращают autorelease d экземпляров.

Это будет означать, что когда пул Autorelease сливается, объект будет разрушен. Если вы сами не управляете пулом Autorelease, его следует уничтожить, когда вы снова вернетесь в очередь сообщений (при условии, что вы находитесь в потоке пользовательского интерфейса).

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

Если это не то, что вы хотите, вам нужно будет retain.

+0

ОК, это имело бы смысл для меня, за исключением того, что объекты с авторефлексией, вызванные ими, возвращаемые моими конструкторами удобных классов, похоже, не выпускаются одинаково. – james

+0

@james: когда вы [autorelease] их? Потому что, если вы [автореализовываете] их в то время, когда ваш пул является единственным в стеке, он входит в этот пул. (Все, что [autorelease] делает, добавляет элемент в список вещей для текущего пула верхнего стека, чтобы очистить его при сливе) –

+1

@james: Если вы хотите знать, почему ваши методы ведут себя определенным образом, Вам нужно будет увидеть методы и, возможно, контекст, в котором они используются. – Chuck

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