美文网首页iOS开发ios基础知识
如何写delegate的继承

如何写delegate的继承

作者: jokers200 | 来源:发表于2016-09-28 18:24 被阅读477次

项目中我们有时候会遇到这样的问题,父类里面声明了一个delegate,子类想借用这个delegate,就会继承一下,或者扩展一下。
父类:

@protocol ManDelegate <NSObject>
- (void)myNameIs:(NSString*)name;
@end

@interface Man : NSObject
@property (nonatomic, weak) id<ManDelegate> delegate;
@end

子类:

@protocol FatherDelegte <NSObject>
- (void)mySonIs:(NSString*)son;
@end

@interface Father : Man
@property (nonatomic, weak) id<ManDelegate,FatherDelegte> delegate;
@end

或者

@protocol FatherDelegte <ManDelegate>
- (void)mySonIs:(NSString*)son;
@end

@interface Father : Man
@property (nonatomic, weak) id<FatherDelegte> delegate;
@end

使用没问题,但是会遇到warning:

Auto property synthesis will not synthesize property 'delegate'; it will be implemented by its superclass, use @dynamic to acknowledge intention

这是由于父类已经声明过了,子类再声明也不会重新生成新的方法了。如果对警告没有要求,可以凑合用,但是如果希望代码整洁一点的呢,就要改下了。翠花,上代码:

@dynamic delegate;
- (id<FatherDelegte>)delegate
{
    id curDelegate = [super delegate];
    return curDelegate;
}

- (void)setDelegate:(id<FatherDelegte>)delegate
{
    [super setDelegate:delegate];
}

这样就解决了,其实warning里面已经给解决方案的提示了。

相关文章

网友评论

  • a43eb6b49a9e:只写了@dynamic delegate; 没有实现对应的setter和getter方法;但是没有崩溃,是什么原因,可以解释一下吗?
    jokers200:@momo462 子类没有实现,继承了基类的实现,所以不会崩溃,如果基类也没实现就崩溃了

本文标题:如何写delegate的继承

本文链接:https://www.haomeiwen.com/subject/uutkyttx.html