項目中我們有時候會遇到這樣的問題,父類里面聲明了一個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里面已經給解決方案的提示了。