gpt4 book ai didi

ios - 为什么在子类中看不到继承的实例变量?

转载 作者:行者123 更新时间:2023-11-29 12:21:32 25 4
gpt4 key购买 nike

我在 Matt Neuberg 的 iOS Programming Fundamentals 中读到,实例变量是 protected ,这意味着除了这个类的子类之外,其他类看不到它们。

我有一个父类 A,我在其中定义了一个 ivar 列表。(上午)

@interface A ()

@end

@implementation A
{
NSArray *list;
}

@end

B 类扩展了 A (B.h)

#import "A.h"

@interface B:A

@end

(B.m)

@interface B ()

@end

@implementation B

list =
...

@end

我想在子类 B 中使用 ivar 列表,但编译器看不到父类中声明的引用。我已经尝试明确使用 @protected 但这不起作用。我不想在公共(public)界面上公开 ivar 列表。它是一个内部结构,是所有子类的公共(public)元素。我该怎么做?

最佳答案

在类的公共(public)接口(interface)(换句话说,@interface 部分)之外声明的实例变量默认为私有(private)。您可以向声明添加可见性修饰符以更改一个或多个 ivar 的可见性,如下所示:

@implementation A
{
NSNumber *_ivarWithDefaultVisibility;

@protected
NSArray *_list;
NSString *_anotherIvarWithProtectedVisibility;
}

(请注意,根据 Apple 的 Cocoa 编码指南,ivar 名称应以下划线为前缀。)

关于ios - 为什么在子类中看不到继承的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30514550/

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