iPhone UISlider метод действия - PullRequest
0 голосов
/ 21 января 2010

В текущей книге, которую я читаю, автор реализует IBAction для слайдера следующим образом (см. Ниже V001). На мой взгляд, это показалось немного сложным, поэтому я пересмотрел код (V002). Правильно ли я считаю, что отправитель является указателем на объект, вызвавший событие? Кроме того, есть ли недостаток приведения отправителя в заголовке, вместо того, чтобы оставлять его в качестве отправителя и приводить его в теле метода?

V001

-(IBAction)sliderChange:(id)sender {
    UISlider *slider = (UISlider *)sender;
    int progressAsInt = (int)([slider value] + 0.5f);
    NSString *newText = [[NSString alloc] initWithFormat:@"%d", progressAsInt];
    [sliderLabel setText:newText];
    [newText release];      
}

V002

-(IBAction)sliderChange:(UISlider*)sender {
    NSString *newText = [[NSString alloc] initWithFormat:@"%d",(int)[sender value]];
    [sliderLabel setText:newText];
    [newText release];
}

1009 * Гэри *

1 Ответ

3 голосов
/ 21 января 2010

идентификатор специального типа, который может содержать любой объект. Нюанс в том, что у вас нет четко определенной безопасности типов. Вы можете вызвать любой селектор для любого объекта, и если он существует, он будет вызван.

В V001 выполнение [значения ползунка] вместо [значения отправителя] имеет более логичный смысл, который, я думаю, вероятно, почему вы в первую очередь занялись рефакторингом, потому что он не вызывается.

В V002 [значение отправителя] извлекает свойство float того же UISlider, но скрывает тот факт, что вы, возможно, не получаете объект-слайдер, и это может быть на любом объекте.

Это вопрос стиля и дискриминации. Я довольно усердно работаю в своем собственном коде, чтобы определить, к какому конкретному объекту я пытаюсь получить доступ к селектору, и даже захожу до того, что вызываю isKindOfClass и проверяю, вызываю ли я селектор для правильного объекта UISlider. Чтобы ответить на ваш нижеследующий вопрос: тип объекта не исключен, как это должно быть при использовании id.

Почему? Я хочу, чтобы несколько слайдеров в одном представлении обрабатывали событие слайдера, я не хочу, чтобы один слайдер влиял на данные обоих, даже если я хочу обрабатывать их одинаково.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...