Есть много причин, почему это имеет значение. Вот простой пример, если вы не использовали ARC.В Objective-c выполняется функция Performer, исполняемая inline или отправленная для выполнения как другое событие?
[instance performSelector:selector withObject:objectA];
[objectA release]; // Did the selector actually finish executing
// in the line above so everyone's done with objectA
// or did the selector merely get scheduled in the line
// above, and is yet to execute, so objectA had better
// not be released yet?
Я сделал некоторые исследования и подсказки контекста, похоже, указывает на то, что селектор становится выполненным inline. Но я не видел каких-либо окончательных утверждений в любом месте, где бы я ни выглядел, который утверждает, что он запускается встроенным.
@JoshCaswell Это не очень устарело (я обновил формулировку), но, как говорится в документе, 'NSInvocation' должен использоваться большую часть времени. использование 'performSelector' может легко добавлять ошибки, которые трудно поймать. (например, подпись метода изменения из '' NSNumber' '' '') –
Я не хотел задавать 2 вопроса в 1, но я также вижу, что много болтовней о селекторах не может вернуть примитив и т. д.Но я не могу найти окончательного утверждения, говорящего: «все селекторы должны возвращать NSObject». На самом деле все мои селекторы - (void) myFunction. Они работают, но тем не менее это то, что я делаю технически незаконным? –
@JoeC Да, это неопределенное поведение. Если вы возьмете аргумент return и сделаете что-нибудь с ним, приложение, скорее всего, выйдет из строя. (это может зависеть от arch/platform/version) –