gpt4 book ai didi

objective-c - 在 ObjC 类别中声明属性是否会覆盖在公共(public)接口(interface)上声明的同名属性?

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:02 28 4
gpt4 key购买 nike

这并不是为了解决任何特定的问题,只是想了解 Objc 中属性的细微差别。

假设我有一个类 Dude

# Dude.h

@interface Dude: NSObject

@property (readonly, nonatomic) NSNumber *height;

@end

我扩展了实现文件中的类,但更改了属性。

# Dude.m

@interface Dude()

@property (readwrite, atomic) NSNumber *height;

@end


@implementation Dude
@end

我得到一个错误。

'atomic' attribute on property 'height' does not match the property inherited from 'Dude'

那么这里到底发生了什么。分机上的属性是同一个属性吗?我只是重写访问器吗?

此外,当我更改顺序以便公共(public)接口(interface)为 readwrite 但私有(private)接口(interface)为 readonly 时,我收到错误:

Illegal redeclaration of property in class extension 'Dude' (attribute must be 'readwrite', while its primary must be 'readonly')

这让我觉得这是一个完整的重新声明,但现在我不太确定到底发生了什么。寻求澄清。

最佳答案

您可以将其视为一个公共(public)和私有(private)接口(interface)。

.h 文件中声明的接口(interface)是您的类的公共(public)接口(interface)。因此,如果您有理由将一个属性声明为只读,那是有道理的。

.m 文件中的无名类别 (Dude()) 是您对属性的私有(private)视线。因此,您可以在此处指定 readwrite 以使您的类能够在内部更改属性,但不能向外界更改。

您还可以将这些声明用于您的方法,以在 .h 中声明公共(public)接口(interface),在 .m 中的接口(interface) Dude() 中声明私有(private)方法。

你的公共(public)和私有(private)接口(interface)的组合必须有意义,你不能声明一个公共(public)属性 readwrite 并在内部说它只是 readonly ...

最后是 Objective-C:这只适用于您的编辑器和编译器。存在的所有内容都可以访问,即使它被声明为某种私有(private)。

关于objective-c - 在 ObjC 类别中声明属性是否会覆盖在公共(public)接口(interface)上声明的同名属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54544482/

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