【问题标题】:How to make properties private?如何将属性设为私有?
【发布时间】:2011-10-23 07:31:51
【问题描述】:

有人告诉我,我可以将属性设为私有,这样只有类的实例才能引用它们(通过自身)。

但是,如果我在类接口中使用@private,然后正常声明属性,仍然可以从类外部访问它......那么我怎样才能将属性设为私有呢?请提供语法示例。

【问题讨论】:

    标签: iphone objective-c ios xcode properties


    【解决方案1】:

    在实现 (.m) 文件中声明属性,如下所示:

    @interface MyClass()
    
    @property (nonatomic, retain) MyPrivateClass *secretProperty;
    
    @end
    

    您将能够在您的类中使用该属性而不会出现编译器警告。

    【讨论】:

    • 在那里创建属性有什么好处。我们可以直接使用ivar。有吗?
    • 优点是一致性(公共和私有属性的访问方式相同)、清晰(属性看起来像属性)和灵活性(所有属性访问都通过相同的方法,因此延迟加载、计算属性等都是微不足道的)。
    【解决方案2】:

    您需要在类扩展中包含这些属性。这允许您在接口声明的实现文件中定义属性(以及最近的 iVar)。它类似于定义一个类别,但括号之间没有名称。

    如果这是你的 MyClass.m 文件:

    // Class Extension Definition in the implementation file
    @interface MyClass()
    
    @property (nonatomic, retain) NSString *myString; 
    
    @end
    
    @implementation MyClass
    
    - (id)init
    {
        self = [super init];
        if( self )
        {
            // This property can only be accessed within the class
            self.myString = @"Hello!";
        }
    }
    
    @end
    

    【讨论】:

    • 请注意,类扩展名可以在一个头文件中,您只在需要访问的类中#import,从而有效地允许“库私有”属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2013-01-13
    • 2015-06-09
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多