gpt4 book ai didi

ios - 为什么默认 Storyboard 应用程序有第二个接口(interface)声明

转载 作者:可可西里 更新时间:2023-11-01 06:18:33 25 4
gpt4 key购买 nike

抱歉,如果这很愚蠢...但它让我感到困惑?...

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

.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {

}

@end

.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

....

@end

最佳答案

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

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

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

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 简洁且适当限制。

关于ios - 为什么默认 Storyboard 应用程序有第二个接口(interface)声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9471797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com