【问题标题】:Using @private keyword in objective-c correctly在objective-c中正确使用@private关键字
【发布时间】:2013-02-03 06:39:15
【问题描述】:

我读过私有变量应该标记为私有,否则它们会受到保护,并且被认为是最佳实践?有人可以为目标 C 解释这一点吗?我来自 C# 背景。

   // BAD

    @interface Test: NSObject
    {
        NSString* _name;
    }

    @property (nonatomic, retain) NSString* name;

    // GOOD

    @interface Test: NSObject
    {
        @private
        NSString* _name;
    }

    @property (nonatomic, retain) NSString* name;

【问题讨论】:

  • 你是对的。像所有语言一样,只公开你需要的东西。 @rmaddy 发布的答案是使用更现代技术(自 XCode 4.0 起)的非常简单的示例。话虽如此,在公开私有变量方面可以进行很多自定义。

标签: objective-c private


【解决方案1】:

利用现代 Objective-C:

// Best
// .h file
@interface Test : NSObject

// public properties and methods declarations

@end

// .m file
@interface Test ()

// private properties declarations here

@end

@implementation Test {
    // private ivars here - if needed
}

// method implementations here

@end

您发布的示例代表了在现代 Objective-C 提供新方法之前的旧做法。

不再需要在 .h 文件中放置任何 ivars,这意味着 @private 声明没有用处。唯一应该在 .h 中的是公共方法和公共属性声明。其他所有内容都放在 .m 文件中。

【讨论】:

  • 好的,但你能回答旧语法的问题吗?
  • 对不起,我以为我做到了。是的,您发布的“坏”做法默认为“受保护”。 “好”的做法使 ivars 私有化。将它们设为私有会更好,因为它进一步确保了良好的封装性。允许子类从基类直接访问受保护的 ivars 会破坏封装。
猜你喜欢
  • 2011-09-15
  • 2017-10-25
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2010-12-31
  • 2022-01-22
相关资源
最近更新 更多