gpt4 book ai didi

objective-c - 是否有可能在类扩展中声明一个 protected ivar 并让父类(super class)能够访问它或改为做什么?

转载 作者:行者123 更新时间:2023-12-02 00:04:38 24 4
gpt4 key购买 nike

我有一个内部使用 ivar 的类。我不想在类的公共(public)接口(interface)( header )中公开 ivar,但我在实现文件中声明并使用它,如下所示:

//--------SomeClass.h--------------
@interface SomeClass : NSObject
@end

//--------SomeClass.m--------------
@implementation SomeClass ()
{
@protected
NSMutableDictionary *_privateData;
}

@implementation SomeClass
// ...
@end

然后在 SomeClass 的子类中,我尝试访问 _privateData:

//--------SomeSubClass.m--------------
@implementation SomeSubClass

// ...

- (void)someMethod {
NSLog(@"%@", _privateData); // NOPE
NSLog(@"%@", self->_privateData); // NOPE
NSLog(@"%@", super->_privateData); // NOPE
}

// ...

@end

但是我不能。有办法做到这一点吗?

最佳答案

为了实现所需的行为,您应该创建一个子类头文件,声明所有 protected 数据,并在子类的 .m 文件中#import .

哺乳动物子类.h:

@interface Mammal () {
@protected
NSMutableDictionary *_privateData;
}

//...

@end

人类.m:

#import "Human.h"
#import "MammalSubclass.h"

@implementation Human //subclasses Mammal

- (void)someMethod {
NSLog(@"%@", _privateData);
}

//...

@end

关于objective-c - 是否有可能在类扩展中声明一个 protected ivar 并让父类(super class)能够访问它或改为做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19193115/

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