面试题答案
一键面试- 协议声明:
- 在Objective - C中,协议使用
@protocol
关键字声明。例如:
@protocol MyProtocol <NSObject> - (void)someMethod; @end
- 协议定义了一组方法签名,遵守该协议的类必须实现这些方法(除非这些方法被标记为可选的,使用
@optional
关键字)。协议可以继承自其他协议,通过<>
语法指定,如<NSObject>
,NSObject
协议定义了一些基础的方法,几乎所有的Objective - C类都直接或间接遵守NSObject
协议。
- 在Objective - C中,协议使用
- 委托设置:
- 首先,委托类(持有委托属性的类)需要定义一个属性来持有委托对象,并且该属性的类型必须遵守相关协议。例如:
@interface MyClass : NSObject @property (nonatomic, weak) id<MyProtocol> delegate; @end
- 然后,在某个地方创建委托对象,并将其赋值给委托属性。比如在另一个类中:
@interface AnotherClass : NSObject <MyProtocol> - (void)setup { MyClass *myObject = [[MyClass alloc] init]; myObject.delegate = self; } - (void)someMethod { NSLog(@"执行了协议方法"); } @end
- 消息传递:
- 当委托类中的某些事件发生时,它会检查委托是否存在(不为
nil
),然后调用委托对象上协议定义的方法。例如:
@implementation MyClass - (void)doSomething { if ([self.delegate respondsToSelector:@selector(someMethod)]) { [self.delegate someMethod]; } } @end
- 这里,
respondsToSelector:
方法用于检查委托对象是否实现了指定的方法。如果实现了,就通过[self.delegate someMethod]
调用委托对象的该方法,从而完成消息从委托类到委托对象的传递。
- 当委托类中的某些事件发生时,它会检查委托是否存在(不为