在我的应用程序中,有些地方我必须在其他类中调用一组代码。我通常使用协议来这样做
// Teacher.m
@protocol TeacherProtocol
- (void)assignHomeWork;
- (void)respondToAssingment;
@end
for (Student *student in self.studentInClass) {
[student assignHomeWork];
}
// Student.m <TeacherProtocol>
- (void)assignHomeWork {
[self receivedAssignmentPaper];
}
// Nerd.m : Student
- (void)assignHomeWork {
[super assignHomeWork];
[self listenWithAttention];
}
// Douchebag.m : Student
- (void)assignHomeWork {
[super assignHomeWork];
[self listenToHisIPod];
}
// Blonde.m : Student
- (void)assignHomeWork {
[super assignHomeWork];
[self makeUp];
}
在上面的示例中,它没问题并且确实有意义。但是,在某些情况下,该类应该向另一个类发送消息,并且永远不会有任何其他类收到此消息。
// Room.m
- (IBAction)mainSwitchWasToggle:(id)sender {
[self.mainLightBulb toggle];
}
// MainLightBulb.m
- (void)toggle {
if ([self.bulb isTurnOn]) {
[self.bulb turnOff];
} else {
[self.bulb turnOn];
}
}
问题是,我应该将切换转换为 Room 对象的协议还是将其保留为像这样的公共方法?会不会有其他影响?