項目中我們有時候會遇到這樣的問題,父類里面聲明了一個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
這是由于父類已經(jīng)聲明過了,子類再聲明也不會重新生成新的方法了。如果對警告沒有要求钞艇,可以湊合用啄寡,但是如果希望代碼整潔一點的呢,就要改下了哩照。翠花挺物,上代碼:
@dynamic delegate;
- (id<FatherDelegte>)delegate
{
id curDelegate = [super delegate];
return curDelegate;
}
- (void)setDelegate:(id<FatherDelegte>)delegate
{
[super setDelegate:delegate];
}
這樣就解決了,其實warning里面已經(jīng)給解決方案的提示了飘弧。