Ios 从子类访问超类的委托
我有四个类MainVC,ParentClient和ChildClient1,ChildClient2(它们是ParentClient的子类)。ParentClient具有对MainVC的委托,因此在MainVC中Ios 从子类访问超类的委托,ios,objective-c,inheritance,delegates,Ios,Objective C,Inheritance,Delegates,我有四个类MainVC,ParentClient和ChildClient1,ChildClient2(它们是ParentClient的子类)。ParentClient具有对MainVC的委托,因此在MainVC中 - (void)viewDidLoad { [super viewDidLoad]; [ParentClient instance].mainViewDelegate = self; } 然后ParentClient看起来像这样 @interface Base
- (void)viewDidLoad
{
[super viewDidLoad];
[ParentClient instance].mainViewDelegate = self;
}
然后ParentClient看起来像这样
@interface BaseClient : NSObject
@property (assign) id<MainVCInteraction> mainViewDelegate;
+(instancetype) instance;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
[ChildClient1 instance].mainViewDelegate = self;
[ChildClient2 instance].mainViewDelegate = self;
}
@接口基本客户端:NSObject
@属性(分配)id mainViewDelegate;
+(instancetype)实例;
@结束
现在我想从ChildClient1,ChildClient2访问
mainViewDelegate
,它返回我nil,而[ParentClient instance]。mainViewDelegate返回正确的值。下面是我所做的,我删除了BaseClient类,以便ChildClient1,ChildClient2不再是BaseClient的子类。我定义了一个objective-c协议文件MainVCInteaction.h,并使Client1、Client2如下所示:
#import "MainVCInteraction.h"
@interface ChildClient1 : NSObject
@property (assign) id<MainVCInteraction> mainViewDelegate;
+(instancetype) instance;
@end
#import "MainVCInteraction.h"
@interface ChildClient2 : NSObject
@property (assign) id<MainVCInteraction> mainViewDelegate;
+(instancetype) instance;
@end
这位伟人自己说:“我不知道Objective-C的具体情况,但一般来说,单例类应该防止子类化。”它们是两个实例,您应该分别分配它们的mainViewDelegate
<代码>[ParentClient实例].mainViewDelegate=self代码>不能影响ParentClient及其子类的所有实例。