在括号中的.h文件中声明变量

时间:2013-11-19 23:47:37

标签: objective-c

在.h文件的公共接口内声明变量时括号内的内容是什么?你会做这样的事情是什么情况?在我看来,你应该只使这些变量支持的属性公开,并从.h文件中删除变量。

@interface GSFullscreenAdViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
{

    /**
     * This view controller's view.
     */
    GSFullscreenAdView * m_adView;

    /**
     * The ad that is currently fetched or displaying. Resets to nil on ad dismissal.
     */
    GSFullscreenAd * m_currentAd;

    /**
     * The view controller that this GSFullscreenAdViewController is being
     * displayed from.
     */
    UIViewController * m_parentViewController;

    /**
     * Whether the ad is currently displaying
     */
    BOOL m_isDisplaying;

    /**
     * Whether the ad is currently animating onto the screen
     */
    BOOL m_isPresenting;

    /**
     * Whether the ad is in the process of being dismissed
     */
    BOOL m_isDismissing;

    UIImagePickerController * m_imagePickerController;
}

@property (readonly) GSFullscreenAdView * adView;
@property (readonly) BOOL isDisplaying;
@property (nonatomic) BOOL allowOrientationChange;

2 个答案:

答案 0 :(得分:0)

@implementation部分声明实例变量的能力实际上是Objective-C的一个相对较新的补充。在Xcode 4.2(2011/10/12发布)之前,您只能在@interface部分声明实例变量。也许您正在查看的代码是在Xcode 4.2(或更高版本)广泛使用之前编写的。

Objective-C Feature Availability Index

中自行检查

答案 1 :(得分:0)

现在只要声明一个属性就可以用于大多数情况。对于旧版本的objective-c,必须手动声明相应的iVar。为此,必须在声明属性之前在大括号内声明iVar。

即使在今天,您可能希望将属性与给定的iVar相关联(通过在@synthezise语句中命名iVar。但是,为此,在{{1}之后的大括号内声明iVar就足够了在这些情况下,您可以在.m文件中的第二个@interface语句后面括号中声明它们。

嗯,它仍然有效。一些oder教程仍然使用这种模式。您或您的团队/公司可能仍然使用执行此操作的旧代码。

最后,有时候,克服一个古老的特点很难:-)