Задача C: Когда нам нужно создать новый протокол делегата?

Я просматривал несколько примеров кода и наткнулся на это приложение, в котором есть следующие классы

1) FaceView Class - рисует лицо и настраиваемую улыбку 2) HappinessViewContoller Class - устанавливает улыбку на лице, нарисованную на основе ввода ползунка в интерфейсе.

Программа фактически реализует протокол делегата в классе FaceView.h, как показано ниже.

#import <UIKit/UIKit.h>

@class FaceView;

@protocol FaceViewDelegate
- (float)smileForFaceView:(FaceView *)requestor;  // -1.0 (frown) to 1.0 (smile)
@end

@interface FaceView : UIView {
    id <FaceViewDelegate> delegate;
}

@property (assign) id <FaceViewDelegate> delegate;

@end

и HappinessViewController заявляет, что он использует FaceViewDelegate

#import <UIKit/UIKit.h>
#import "FaceView.h"

@interface HappinessViewController : UIViewController <FaceViewDelegate>
{
    int happiness; // 0 to 100
    UISlider *slider;
    FaceView *faceView;
}

@property int happiness;

@property (retain) IBOutlet UISlider *slider;
@property (retain) IBOutlet FaceView *faceView;

- (IBAction)happinessChanged:(UISlider *)sender;

@end

Я немного смущен тем, почему в этом сценарии требуется протокол делегата. Могу я просто установить метод «- (float) smileForFaceView: (FaceView *) requestor;» непосредственно в HappinessViewController без объявления делегата faceView?

Спасибо!

Чжэнь Хоэ


person Zhen    schedule 15.04.2011    source источник


Ответы (1)


Никогда не требуется создавать протокол для делегатов, но это упрощает обеспечение совместимости, если есть методы, которые делегат должен реализовать. В этом случае, когда делегат установлен, объект FaceView может использовать [newDelegate conformsToProtocol:@protocol(FaceViewDelegate)], чтобы убедиться, что делегат реализует любые требуемые методы. Если они решат добавить больше требуемых методов, им не придется изменять свой код, потому что делегат должен реализовать все необходимые методы, чтобы соответствовать.

Если у вас нет необходимых методов, это не так выгодно, поскольку вы не можете использовать его для проверки типов. Однако, если вы пишете код библиотеки, вы все равно должны его использовать, потому что вы можете поместить туда все свои возможные методы делегирования и использовать их в качестве справочника.

person ughoavgfhw    schedule 15.04.2011