На вопрос № 1: performSelector:withObject:afterDelay:
определяется в классе NSObject, а не в протоколе NSObject. Любой используемый вами объект, вероятно, является экземпляром NSObject. Возможно, вы ссылаетесь на компилятор предупреждение , полученный в результате статической проверки типов. (Технически возможно, что объект, соответствующий протоколу NSObject, не является NSObject; NSProxy является одним из примеров. Но любой обычно используемый вами объект будет NSObject.) Вы можете проигнорировать это предупреждение (в Objective-C вы попробуйте отправить любое сообщение любому объекту). Или, если хотите, вы можете привести его к id
(что позволяет отправлять любое сообщение без предупреждений) или к NSObject *
.
На вопрос № 2: «если задержка составляет несколько секунд, то она была бы освобождена из памяти» Нет, в документации для performSelector:withObject:afterDelay:
говорится «Этот метод сохраняет приемник и параметр anArgument до тех пор, пока не будет выполнен селектор. «