【问题标题】:Can a class use methods declared in one of its categories?一个类可以使用在它的一个类别中声明的方法吗?
【发布时间】:2011-11-02 22:30:03
【问题描述】:

我有一堂大课。总而言之,它只有一个其他类应该调用的方法,然后是一堆方法来做不同的事情,具体取决于接收到的数据类型。 .m 文件变得如此之大,以至于我想将其拆分。我的想法是将方法划分为不同的类别(每个类别都将使用特定类型的数据)。所以我做到了。

main方法里面我什么都没改,所以行如

[self methodNowInMyCategory];

还在。但是,由于“未找到实例方法 -methodNowInMyCatefory”,我现在在班级的主文件中收到警告。主 .h 文件正在导入类别的 .h 文件,因此方法是可见的(Xcode 为代码着色)。这个类只是不承认它们是它自己的。

有没有办法在一个类中使用在它的一个类别中声明的方法?如果不是,您会建议我使用哪种方法来解决我的问题? main 方法接收文件路径,打开文件,分析内容,然后发送一个或多个方法。

【问题讨论】:

    标签: objective-c class methods categories large-files


    【解决方案1】:

    您可以将类别声明拆分为一个或多个 .h 文件,然后将类别标头导入类的主 .m 中。

    【讨论】:

    • 也许我在问题中没有正确解释 mayself。我创建的每个类别都有自己的 .h 和 .m 文件。所有 .h 文件都已包含在主类中。 =/
    • 啊哈!重读您的答案,我明白了:“在您班级的主要 .m 中导入 [...]”。这就是诀窍 =) 谢谢!
    • @Solem:之所以需要在.m文件中导入是因为你的分类头文件导入了类的头文件,所以从类的头文件中导入会产生循环依赖,一般会导致“方法未找到”错误。
    • @Chuck,我认为“导入”可以解决这个问题。此外,我的头文件以#ifndef 开头,以确保它们只包含一次并避免出现问题。但是,您一定是对的,因为在将导入移动到 .m 之后,问题就解决了。感谢您指出这一点!
    • @Solem:#import 和 include-guards 都解决了一个相关但不同的问题,其中包含所有包含一个公共文件(或彼此)的多个文件将创建重复定义。 #import 第一次只包含文件,但是这种唯一性并不能解决循环依赖的问题,每个文件都需要另一个文件的内容在它之前。由于只有一个可以在另一个之前没有重复,因此其中一个文件中的代码将无法看到另一个文件中的代码。
    猜你喜欢
    • 1970-01-01
    • 2012-04-22
    • 2013-01-12
    • 2019-05-06
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2015-01-11
    • 2016-03-27
    相关资源
    最近更新 更多