Я нашел странное ключевое слово в NSObject.h
- (oneway void)release;
Я поискал в Интернете и узнал, что это связано с асинхронной передачей сообщений, которая похожа на передачу сообщений в Erlang.
Кажется, из этого можно сделать много интересного. Каковы хорошие варианты использования этого ключевого слова?
objective-c
syntax
keyword
use-case
эонил
источник
источник
oneway void
это одна из тех красивых случайных метафор, которые мы иногда видим в кодировании, в данном случае смерти. «Если есть что-нибудь на другой стороне, не говори нам».Ответы:
oneway
используется с API распределенных объектов, что позволяет использовать объекты objective-c между различными потоками или приложениями. Он сообщает системе, что она не должна блокировать вызывающий поток, пока метод не вернется. Без него вызывающий блок будет заблокирован, даже если тип возвращаемого значения метода недействителен. Очевидно, он никогда не используется ни с чем, кроме void, так как это будет означать, что метод что-то возвращает, но вызывающий не получает этого.Для получения дополнительной информации о распределенных объектах см. Концептуальные объекты DistrObjects какао .
источник
Согласно документации Apple, oneway используется только для распределенного объекта (а не для многопоточности).
Модификатор oneway используется только в том случае, если объект удален. В этом случае вызов освобождения может возвращаться асинхронно (до завершения метода). В сети это имеет смысл, потому что ожидание ответного сообщения может занять некоторое время.
Метод выпуска не имеет возвращаемого значения, поэтому его вызов может выполняться асинхронно. Напротив, при сохранении и автоматическом выпуске идентификатор возвращается, поэтому нам приходится ждать, пока ответное сообщение не будет передано по сети.
источник
oneway
ключевого слова заставляет сообщение не блокировать вызывающий поток во время выполнения вызываемого метода, это заставляет вызываемый метод выполняться во втором потоке. Разве это не многозадачность (в простейшей форме)? Могу ли я использовать это для быстрого (без особых усилий) отделения некоторых небольших операций от другого потока? Большое спасибо.- (oneway void) release
? Это не на другой машине или в другом процессе.one way
метода означает «don't wait for the method to complete and return anything. block it if there is any n/w trafic or so.
Имею ли я смысл?»