fla*_*nka 2 architecture objective-c
基本上我想要解决以下问题的最佳解决方案:
// A.h
@interface A : NSObject
@end
// A.m
#import "A.h"
@implementation A
- (id)init
{
self = [super init];
if (self) {
[self childWillOverride];
}
return self;
}
- (void)childWillOverride {
NSLog(@"childWillOverride - A");
}
@end
// B.h
#import <UIKit/UIKit.h>
#import "A.h"
@interface B : A
@end
// B.m
#import "B.h"
@implementation B
- (id)init
{
self = [super init];
if (self) {
[self childWillOverride];
}
return self;
}
- (void)childWillOverride {
[super childWillOverride]; // This is not possible
NSLog(@"childWillOverride - B");
}
@end
Run Code Online (Sandbox Code Playgroud)
我不想将函数名称移动到Ah,或者我不想为函数名创建新的Category或.h文件.你有其他想法吗?
Rob*_*Rob 13
就个人而言,我宁愿为那些受保护的方法创建一个单独的.h文件,就像Apple所做的那样<UIKit/UIGestureRecognizerSubclass.h>.
另一种方法(我不喜欢)是使用私有类扩展:
因此,你的Bm将是:
#import "B.h"
@interface A ()
- (void) childWillOverride;
@end
@implementation B
- (id)init
{
self = [super init];
if (self) {
[self childWillOverride];
}
return self;
}
- (void)childWillOverride {
[super childWillOverride]; // This is now possible
NSLog(@"childWillOverride - B");
}
@end
Run Code Online (Sandbox Code Playgroud)
我不喜欢这种方式使用类扩展(在B的.m文件中定义A的私有实现很奇怪),所以我个人使用单独的.h方法.
| 归档时间: |
|
| 查看次数: |
2855 次 |
| 最近记录: |