Мне тоже понадобилось время, чтобы понять это. Ключевым моментом является то, что ссылка селектора в основном представляет собой переписанную строку C и что не «принадлежит» какому-либо конкретному классу или объекту . Когда в документации NSSelectorFromString()
говорится, что селектор «зарегистрирован», это просто означает, что переодетая строка C «благословлена» (мой термин) для использования в качестве селектора во время выполнения Objective-C.
Вот раздел о возвращаемом значении для NSSelectorFromString()
из документации Apple:
Возвращаемое значение
Селектор, названный aSelectorName .
Если aSelectorName равно nil
или не может
быть преобразован в UTF-8 (это должно быть
только из-за недостатка памяти),
возвращает (SEL)0
.
Внимательное прочтение показывает, что only ситуации, которые могут привести к возвращению (SEL)0
, это если ваша строка была nil
или вам не хватило памяти.