【问题标题】:Proper way to structure classes in Xcode framework在 Xcode 框架中构造类的正确方法
【发布时间】:2009-12-29 10:17:55
【问题描述】:

我正在构建一个自定义 Xcode 框架,我有一个名为 AXController 的类,它有一个名为 showActivationWindow 的类方法。 showActivationWindow 使用AXWindowController 初始化并显示一个窗口,NSWindowController 的子类。然后,AXWindowController 调用activate,这是AXController 中的一个类方法,在它显示的窗口中按下按钮。

我将AXWindowController.h 包含在AXController.h 中,并将AXController.h 包含在AXWindowController.h 中,因此每个人都可以访问对方的方法,但这会引发很多Xcode 警告。这似乎也是一个非常不雅的解决方案。

解决这个问题的正确方法是什么?

【问题讨论】:

    标签: objective-c xcode class frameworks controller


    【解决方案1】:

    递归地导入头文件不是一个好主意。有一个指令 @class (link to Apple doc) 告诉有一个这样命名的类。在实践中,用法类似于A.h

    @class B;
    @interface A:NSObject {
       B* anInstanceOfB;
    } 
    ...
    @end
    

    B.h

    #import "A.h"
    @interface B:NSObject {
      A* anInstanceOfA;
    }
    ...
    @end
    

    然后你可以从你的.m文件中导入A.hB.h!但是如果你不使用垃圾收集,请注意不要进行保留循环。

    【讨论】:

    • 感谢您的回答。我将代码更改为使用@class。但我仍然收到涉及以下内容的警告:在 A 类中,我在 @interface 之外有 static NSString *appName;,现在我收到一条警告,上面写着“appName 已定义但未使用”。这个警告是什么意思,为什么我会收到它?
    • 您可能想了解如何在 C 中声明全局变量。此链接 stackoverflow.com/questions/496448/… 可能会有所帮助。简而言之,在A.h 中写extern NSString*appName;A.m 中写#import "A.h" 然后NSString*appName; 最后,如果你想从B.h 引用appName,只需在B.h 中写#import "A.h" .我猜你想要一个像 C++ 这样的类变量,但是 C 或 Objective-C 中的 static 是不同的,它的工作方式也不同。
    • 其实经过一番研究,声明类级变量的正确方法如下:static NSString *myString in A.m.参考:stackoverflow.com/questions/1063229/…
    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多