【问题标题】:Why do default Storyboard apps have a second interface declaration为什么默认 Storyboard 应用程序有第二个接口声明
【发布时间】:2012-02-27 20:28:22
【问题描述】:

对不起,如果这很愚蠢......但这让我感到困惑?......

我正在使用 Xcode 尝试一个新的故事板应用程序,只是问自己为什么在我的实现文件中有第二个 @interface 声明?

.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {

 }

@end

.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

....

@end

【问题讨论】:

    标签: ios objective-c iphone storyboard


    【解决方案1】:

    请参阅 Apple 的文档:https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html

    它是一个类扩展,与类别略有不同,因为它在括号内没有名称。您可以使用它来声明旨在保持私有(在标头之外)的属性和方法,并将公共只读属性和方法重新声明为私有读写。这允许更清晰的封装。

    根据要求,一个友好的例子:

    JYDuckPondManager.h

    @interface JYDuckPondManager : NSObject
    
    @property (nonatomic, assign, readonly) NSUInteger duckCount;
    @property (nonatomic, assign, readonly) CGFloat    waterLevel;
    
    - (JYDuckReaction *)feedDucks:(JYDuckFood *)food;
    - (JYDuckReaction *)harassDucks:(JYDuckTaunt *)taunt;
    
    @end
    

    JYDuckPondManager.m(扩展,省略假想实现)

    @interface JYDuckPondManager ()
    
    //// Redefined for internal modification
    @property (nonatomic, assign, readwrite) NSUInteger duckCount;
    @property (nonatomic, assign, readwrite) CGFloat    waterLevel;
    
    //// Internally exclusive properties
    @property (nonatomic, strong) NSSet  *duckPersonalitySet;
    @property (nonatomic, assign) CGFloat flockAnxietyLevel;
    
    //// Private messages
    - (void)recalculatePondState;
    
    @end
    

    其他对象应该能够与池塘交互,但它们不应该知道池塘中发生的某些事情或重新定义池塘的统计数据。在 .m 扩展名中保留具体细节可确保 .h 简洁且受到适当限制。

    【讨论】:

    • 需要此功能的典型用例是什么?
    【解决方案2】:

    .m 文件中的第二个 @interface 块是扩展名。您可以为要在类内部使用的方法和实例变量添加声明。

    【讨论】:

      【解决方案3】:

      第二个接口@interface ViewController () 是一个类扩展,类似于匿名类别。类扩展被声明为没有名称的类别。在这些扩展中找到的声明直接扩展了在类的主要 @interface 中找到的声明,并且有时可以(在某些情况下)覆盖在主要接口中找到的声明。

      【讨论】:

        猜你喜欢
        • 2020-06-25
        • 1970-01-01
        • 2011-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多