gpt4 book ai didi

objective-c - 调用继承的私有(private)方法的完美解决方案

转载 作者:行者123 更新时间:2023-12-03 07:07:41 27 4
gpt4 key购买 nike

基本上我想要解决以下问题的最佳解决方案:

    //  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

我不想将函数名称移至 A.h,或者不想为函数名称创建新的类别或 .h 文件。你还有其他想法吗?

最佳答案

就我个人而言,我宁愿为这些 protected 方法创建一个单独的 .h 文件,就像 Apple 为 <UIKit/UIGestureRecognizerSubclass.h> 所做的那样。 .

另一种方法(我不喜欢)是使用 private class extension :

因此,您的 B.m 将是:

#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

我不喜欢以这种方式使用类扩展(在 B 的 .m 文件中定义 A 的私有(private)实现很奇怪),因此我个人会使用单独的 .h 方法。

关于objective-c - 调用继承的私有(private)方法的完美解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17379659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com