【问题标题】:How can I write a function in objective-c, that I can use over any object in my iPhone app?如何在 Objective-C 中编写一个函数,我可以在我的 iPhone 应用程序中的任何对象上使用它?
【发布时间】:2009-04-25 11:06:20
【问题描述】:

我想创建一个传递对象的函数。然后,这个函数应该为我打印出一些信息。

喜欢:

analyzeThis(anyObject);

我知道方法,但不知道如何创建函数。据我了解,一个函数在所有方法和类中都适用于全局,对吧?

【问题讨论】:

    标签: iphone objective-c function


    【解决方案1】:

    您可以像使用 C 编写的任何其他函数一样执行此操作。因此,如果您将函数定义在名为 myLibraryFunctions.m 的源文件中,任何想要使用该函数的人都将包含头文件你在哪里定义它(可能是myLibraryFunctions.h,然后确保它们与目标文件链接(如果你只是创建一个文件来容纳你的“全局”函数并包含标题,那么大部分这将在 Xcode 中为你完成)在您访问它的任何源文件中为它们创建文件。然后定义它:

    void analyzeThis(id anyObject);
    
    void analyzeThis(id anyObject) {
        NSLog(@"Object %p: %zu, %@", anyObject, malloc_size(anyObject), anyObject);
    }
    

    但实际上,您可以在函数中编写任何您想要的内容。这些函数不必是任何类定义或类似内容的一部分。在这种情况下,它们与 C 中的完全相同。

    【讨论】:

    • 谢谢! XCode 中用于设置该全局函数文件的隐藏选项在哪里,以便 XCode 为我导入所有标头?那太好了!
    • 将头文件导入添加到您的预编译头文件中。它将是您的项目名称,最后是 _pch。它通常位于 Xcode 项目中的“Other Sources”组下。
    【解决方案2】:

    你是否尝试重新实现 NSObject 的描述方法?如果您发送 NSObject 消息,它将返回一个包含有关自身信息的字符串。您可以覆盖 -(NSString*)description 并向该字符串添加更多信息。

    如果你这样做,你会发现神奇的事情发生了——例如,当你在调试器中打印一个数组对象时,它会迭代数组的所有成员并打印它们的描述。

    【讨论】:

    • 很好的提示,谢谢。实际上我想尝试一些关于内存管理的东西。如果对象仍然存在,该函数将在发布消息之前检查。可能有用。我还不确定。
    • 如果您正在创建该方法进行调试,您真的应该考虑使用 NSZombie。如果您在运行时将其用作守卫,则可能会导致其他问题...
    • 这似乎与 NSZombie 完全不同。
    【解决方案3】:

    有两种方法可以做到这一点:

    • 编写一个全局函数,就像在 C 中所做的那样
    • 创建一个 NSObject 类别,您可以在其中实现一个方法,然后所有以 NSObject 作为祖先的类都可以使用该方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 2012-03-13
      • 2011-12-28
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多