В настоящее время я использую objc_msgSend
для вызова такого селектора при сборе объекта. Есть ли лучший способ сделать это? Вот мой код:Вызов селектора со скалярным аргументом
@protocol ADelegateProtocol {
-(void) timeToEventOneDidChange:(NSInterval) event1;
-(void) timeToEventTwoDidChange:(NSInterval) event1;
}
- (void) delegatesPerformSelector:(SEL) selector withTimeIntervalAsFristParameter:(NSTimeinterval) timeInterval {
for (id<ADelegateProtocol> delegate in delegates) {
if([delegate respondsToSelector:selector]) {
objc_msgSend(delegate, selector, timeInterval);
}
}
}
Селектор передается в качестве параметра, timeInterval
это значение не-объект.
Примечание: я не хочу использовать KVO.
Пожалуйста, измените вопрос, чтобы добавить, что селектор передается в качестве параметра.. Это имеет огромное значение. – taskinoor
Я не думаю, что это действительно улучшится без изменения методов, которые вы хотите вызвать, например. 'NSInvocation' является более утомительным. –
Простите меня, если я что-то упустил, но этот код предполагает, что любой селектор, переданный в этот метод, примет значение 'timeInterval' в качестве аргумента. Если вы знаете, какие аргументы будут, почему бы вам не знать, какой будет селектор? Например, может быть передан селектор 'forBar:', который принимает 'NSTimeInterval' как аргументы, но если я перейду в' fooBaz: ', который примет строку,' responsesToSelector' по-прежнему вернет true, но вы отправите временной интервал, в котором ожидается строка, и вызвать сбой ... – Jasarien