MrB*_*rBr 12 delegates objective-c ios
我创建了一个协议并将其分配给委托对象
@protocol AppBrainDelegate <NSObject>
@optional
- (void)didLocateUser;
- (void)didFinishLoadingDataWithData:(NSDictionary *)fetchedData;
@end
@interface Brain : NSObject
@property (strong, nonatomic) id <AppBrainDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
我认为协议声明中@optional的含义意味着,如果控制器不想要,则控制器不必监听委托方法.
如果没有在控制器中实现第一个委托方法,那么这是崩溃日志.如果我这样做,我不会崩溃.好像我不明白将委托方法声明为可选的概念.你能解释一下我的错误在哪里吗?
*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [EventViewController didLocateUser]:无法识别的选择器发送到实例0x1fb300'
Stu*_*art 36
在@optional
简单地抑制了编译器警告如果该方法在不符合该协议的类来实现.在调用委托方法之前,您仍需要检查委托是否实现它:
if ([delegate respondsToSelector:@selector(didLocateUser)]) {
[delegate didLocateUser];
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您已使用strong
语义创建了委托属性.除非你有特别好的理由使用strong
,否则代表应该是weak
,因为你的Brain
类不拥有它的委托(如果你考虑对象图).
归档时间: |
|
查看次数: |
6317 次 |
最近记录: |