【问题标题】:How to make a private property?如何打造私有财产?
【发布时间】:2011-02-15 15:50:33
【问题描述】:

我试图在我的*.m 文件中创建一个私有属性:

@interface MyClass (Private)
@property (nonatomic, retain) NSMutableArray *stuff;
@end

@implementation MyClass
@synthesize stuff; // not ok

编译器声称没有声明 stuff 属性。但是有一个东西。只是在一个匿名类别。让我猜猜:不可能。其他解决方案?

【问题讨论】:

    标签: objective-c properties


    【解决方案1】:

    您想使用“类扩展”而不是类别:

    @interface MyClass ()
    @property (nonatomic, retain) NSMutableArray *stuff;
    @end
    
    @implementation MyClass
    @synthesize stuff; // ok
    

    类扩展是在 Objective-C 2.0 中创建的,部分是为了这个目的。类扩展的优点是编译器将它们视为原始类定义的一部分,因此可以警告不完整的实现。

    除了纯粹的私有属性之外,您还可以创建内部可读写的只读公共属性。可以在类扩展中重新声明属性,仅用于更改访问(只读与读写),但在声明中必须相同。因此你可以这样做:

    //MyClass.h
    @interface MyClass : NSObject
    { }
    @property (nonatomic,retain,redonly) NSArray *myProperty;
    @end
    
    //MyClass.m
    @interface MyClass ()
    @property (nonatomic, retain, readwrite) NSArray *myProperty;
    @end
    
    @implementation MyClass
    @synthesize myProperty;
    //...
    @end
    

    【讨论】:

    • 您可以简单地编写代码直接设置支持该属性的隐式变量,而不是在 .m 文件中重新声明该属性。该隐式变量具有相同的名称,前缀为下划线。为清楚起见,使用“self”加箭头(连字符+RightAngle)访问它:self->_myProperty = …whatever…;
    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多