【问题标题】:Private and protected @interface in objective c [duplicate]目标c中的私有和受保护的@interface [重复]
【发布时间】:2014-08-14 04:48:46
【问题描述】:

我正在查看一个 Objective-C 类的 .h 文件,我看到其中有多个接口声明,但我不确定它们之间的区别是什么以及它们的含义。

第一次看到

@interface TAModel : NSObject

我认得。 TAModel 是类,NSObject 是它的超类。我感到困惑的是,我看到了另一个接口声明:

@interface TAModel (Protected)

我还看到了另一个 .m 文件(与前两个文件无关):

@interface TAWorker (Private)

我想知道后两个是什么意思,他们在做什么。据我所知,objective-c 类之间没有真正受保护的可见性。

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    它正在创建一个类别类,他们将其受保护/私有成员放入其中。通常的习惯用法只是在.m 文件中创建一个类扩展(因此您会经常看到@interface Foo ();这里的不同之处在于您还可以在.m 文件中声明更多字段,而不仅仅是属性和方法)。

    这两种方式都不是真正受保护的或私有的,因为从技术上讲,您仍然可以通过首先转换为id 或通过performSelector: 方法之一来获取那里声明的内容。但它是伪私有的,因为如果接口不在 .h 文件中,您就不会公开发布接口。

    【讨论】:

    • @interface Foo () 定义了一个类扩展,而不是一个类别。
    • 好吧,这是有道理的。括号中的 private 和 protected 关键字实际上并没有使它们成为私有/受保护的,更多的是它们在 .h .m 文件中,对吗?这是解决此问题的可取方法还是您认为有更好的方法?
    • @strikerdude10 对。您在括号中输入的单词没有区别;这就是您放置声明的地方。一般来说,我认为类扩展是一种更好的方法,因为它为您提供了更多的灵活性。不过,使用类别并没有错。
    猜你喜欢
    • 2019-07-24
    • 2014-01-13
    • 2011-06-14
    • 2013-01-18
    • 2023-04-08
    • 2011-08-19
    • 2014-04-26
    • 2015-08-11
    • 2011-07-09
    相关资源
    最近更新 更多