【发布时间】:2017-08-10 08:33:24
【问题描述】:
我必须向子类公开私有属性。 由于 objc AFAIK 中没有“受保护的属性”之类的东西,我使用 @protected 指令来公开编译器合成的相应 ivar。
这种方法似乎有效,但是,我不确定我是否以某种不可取的方式影响了属性和 ARC 的合成?
我在这里使用了一个弱属性来显示编译器如何强制我将 __weak 修饰符与 @protected 指令一起使用,即编译器似乎知道这两个声明以及它们之间的链接。
超类 .h 文件
@interface Superclass : NSObject
{
@protected
SCNScene * __weak _scnScene;
}
@end
超类 .m 文件
@interface Superclass ()
@property (weak, nonatomic) SCNScene * scnScene;
@end
@implementation Superclass
........
@end
子类 .m 文件
@implementation Subclass
// Can use _scnScene just fine
_scnScene = .....
@end
【问题讨论】:
-
P.S.当然,通过在子类中直接使用 ivar (_scnScene),我会绕过 Super 可能拥有的任何 setter/getter,但我更关心 ARC 等问题。
-
@protected不会干扰 ARC,它定义了 ivars 的可见性。
标签: objective-c properties protected