gpt4 book ai didi

Objective-C:继承 protected /私有(private)原子属性

转载 作者:行者123 更新时间:2023-12-03 17:33:19 24 4
gpt4 key购买 nike

假设我有类 C、D,它们的定义方式如下:

@interface C:NSObject 
@end

@interface D:C
@end

我的目标是将原子属性P添加到类C中,使其在类D(及其派生类)内可见和可用。

最好的方法是什么?

PS 属性必须在 D 中是原子的。

最佳答案

Objective-C 中不直接支持 protected 属性或方法。然而,有一种方法可以按照惯例做到这一点。就像抽象方法一样 - 如果有人愿意,他可以轻松违反它。

您可以在 .m 文件中定义要保护的属性。

@interface DemoObject ()
@property NSString *protectedString;
@end

@implementation DemoObject
//implementation of the class
@end

该属性是原子的 - 这是默认值。

然后你继承DemoObject:

.h 文件

@interface InheritingObject : DemoObject

@end

.m 文件

@interface DemoObject ()

@property NSString *protectedString;

@end

@implementation InheritingObject
- (instancetype)init {
if (self == [super init]) {
self.protectedString = @"Some String";
}

return self;
}
@end

这里基本上发生的是,我们创建了 DemoObject 的扩展,它将我们需要的属性公开给 InheritingObject。任何使用 DemoObject 的对象都看不到 protectedString 属性,因为它未在其 .h 文件中定义。查看该属性的类是定义 DemoObject 扩展的类。

实际上,您可以通过这种方式向任何类公开属性,而不仅仅是派生类。所以打破这个约定很容易。然而,它创造了某种秩序和 protected 范围的幻觉。

关于Objective-C:继承 protected /私有(private)原子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55672470/

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