Является ли сфера применения Cocoa ограниченной делегацией? - PullRequest
1 голос
/ 11 февраля 2012

Допустим, я хочу создавать новые объекты, которые существуют на протяжении всей программы. Мне нужно, чтобы они создавались при запуске и постоянно запускали фоновые задачи по всей программе. Если я помещу их в делегат приложения в applicationDidFinishLaunching, существуют ли объекты на протяжении всей программы или только в области действия applicationDidFinishLaunching? После возвращения applicationDidFinishLaunching мои объекты выходят из области видимости или они продолжают выполнять фоновые задачи? Если да, то как мне обеспечить, чтобы объекты существовали на протяжении всей программы и продолжать выполнять фоновые задачи?

«Фоновые задачи» выполняются в отдельных потоках. Я использую Objective-C с Xcode 3.2.6 на Mac OS X Snowleopard.

1 Ответ

1 голос
/ 11 февраля 2012

Время жизни объектов Objective-C контролируется вручную (при условии, что вы не используете сборщик мусора или ARC). Вы не должны спрашивать, существуют ли они на протяжении всей программы - вместо этого вы должны убедиться, что каждая ссылка на объект, независимо от того, где он находится (основной поток, фоновый поток), должным образом сохранена. См. основные правила управления памятью .

В частности, если вы создаете объект с [[MyClass alloc] init], теперь у вас есть ссылка на этот объект (за который вы в конечном итоге ответственны за освобождение). Если вы затем запустите новый поток и дадите этому потоку ссылку на ваш объект, этот поток должен вызвать [obj retain], чтобы гарантировать, что объект будет продолжать существовать, и [obj release], когда это будет сделано с объектом.

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