我一直在试图find一个解决方法来声明在Objective-C中的@保护属性,所以只有层次结构中的子类可以访问它们(只读,而不是写)。 我读了这样做没有logging的方式,所以我想到了这个解决方法,我想问StackOverflow的意见。 层次结构顶部的每个自定义类都包含三个类,一个实现和两个接口。 我们来命名他们: ClassA.h ClassA_protected.h ClassA.m 然后,这个ClassA的任何子类将像往常一样: ClassB.h ClassB.m 首先,我创build了一个接口ClassA.h ,我声明了一个受保护的intvariables,以便ClassA的任何子类都可以访问它: @interface ClassA : NSObject{ @protected int _myProtectedInt; } @end 下一步是我正在谈论的解决方法。 但是,一旦你读了它,你会看到它是非常简单的。 我声明了第二个名为ClassA_protected.h的接口,它实际上是ClassA.h的扩展 ,并允许我们将属性标记为readonly : #import "ClassA.h" @interface ClassA () @property (nonatomic , readonly) int myProtectedInt; @end 准备受保护的层次结构的最后一步是在ClassA.m中声明它的实现,我们只综合我们的属性: #import "ClassA_protected.h" @implementation ClassA @synthesize myProtectedInt = _ myProtectedInt; @end 这样,每个需要成为ClassA.h的子类的类都将导入ClassA_protected.h 。 所以像ClassB.h这样的孩子将如下所示: #import "ClassA_protected.h" @interface […]