Почему действие, инициируемое NSTimer, не может быть указано блоком?

При создании таймера есть только эти опции:

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds invocation:(NSInvocation *)invocation repeats:(BOOL)repeats;
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats;

Как видите, не существует фабричного метода, который создает таймер с блоком в качестве выполняющего его действия.

Почему это? или я что-то упустил?

2 ответа

Решение

NSTimer предшествует блокам и не был обновлен для их использования. Если вы хотите использовать блок (правильно), используйте источник отправки GCD, т.е. dispatch_source_set_timer и связанные функции.

В ARC остерегайтесь циклов сохранения (хотя вы должны были бы остерегаться и тех, кто использует NSTimer).

Если вы действительно хотите, вы можете передать блок для селектора, создав категорию. Смотрите этот вопрос. Вы также можете использовать этот проект GitHub для этого.

Другие вопросы по тегам