Да, Ваш второй отрывок кода совершенно допустим.
Каждый раз-autorelease отправляется в объект, он добавляется к самому внутреннему пулу автовыпуска. Когда пул истощен, он просто отправляет - выпуск ко всем объектам в пуле.
пулы Автовыпуска являются просто удобством, которое позволяет Вам задерживать отправку - выпуск до "позже". Тот "позже" может произойти в нескольких местах, но наиболее распространенное в приложениях для GUI Какао в конце текущего цикла цикла выполнения.
Да, вы можете использовать pthread_join () (см. Другие ответы, чтобы узнать, как это сделать). Но позвольте мне объяснить модель pthread и показать вам другой вариант.
В Unix процесс завершается, когда основной поток возвращается из основного, когда какой-либо поток вызывает exit () или когда последний поток вызывает pthread_exit (). Основываясь на последнем варианте, вы можете просто сделать так, чтобы ваш основной поток вызвал pthread_exit (), и процесс будет оставаться активным, пока работает хотя бы еще один поток.
Есть несколько способов сделать это, но самый простой - вызвать pthread_exit ()
перед возвратом из main ()
.
Обратите внимание, что этот метод работает, даже если поток, который вы хотите подождать, не может быть присоединен.
Да, одним из таких действий является использование функции pthread_join
: предполагается, что ваш поток находится в состоянии "присоединяемый".
pthread_create
: после того, как эта функция вернет управление, ваш поток будет выполнять вашу функцию потока.
после pthread_create
, используйте tid от pthread_create до pthread__join
.
Если ваш поток отключен, вы должны использовать какой-нибудь другой метод , например общую переменную, ожидание сигнала (ов), общую очередь и т. д.
Большой справочный материал доступен здесь .
Вы можете посмотреть эту страницу: http://publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm?info/apis/users_25.htm
rc = pthread_create(&thread, NULL, threadfunc, NULL);
checkResults("pthread_create()\n", rc);
printf("Wait for the thread to exit\n");
rc = pthread_join(thread, &status);