IBOutlet最佳实践

时间:2015-05-13 11:37:27

标签: ios objective-c uistoryboard iboutlet

我想知道哪个地方最适合从故事板放置IBOutlets:

a)在头文件(.h)

b)在.m文件中创建的类扩展

谢谢

此致

5 个答案:

答案 0 :(得分:13)

你必须记住.h是一个公共标题。

所以如果其他类可以访问它们,请将IBOutlet放在那里。

然而,即使你能做到这一点。我会说在公共标题中公开IBOutlet并不是一个好习惯(从面向对象的角度来看),因为你暴露了一些应该只对谁可见的实现细节。

简而言之,将IBOutlet放在.m的类扩展名中是一种很好的做法。

答案 1 :(得分:8)

来自Apple的Resource Programming Guide: Nib Files

  

奥特莱斯通常被认为是定义类的私人;除非有理由公开公开财产,否则将财产声明隐藏为类扩展。

答案 2 :(得分:4)

如果您不想公开展示该商店,那么课程延期是最佳选择。您的.h应该整洁干净,并且应该只包含那些公开的方法或属性(可供其他程序员使用)。 通过这种方式,你不会因为.h文件中没有不必要的ivars和方法减速而混淆你的队友

所有关于管理代码和减少混淆,否则Objective-C中没有私有方法/属性

另外,如果您检查任何苹果样本,他们会遵循相同的模式。例如LoadingStatus.m有代码

#import "LoadingStatus.h"

@interface LoadingStatus ()

@property (nonatomic, strong) UIActivityIndicatorView *progress;
@property (nonatomic, strong) UILabel *loadingLabel;

@end

答案 3 :(得分:3)

假设这是针对视图控制器的,则选项b更好,因为您不应该公开公开这些出口以供其他类直接交互。他们应被视为您的私人知识。您的控制器应该公开一个不同的,更合适的接口。

如果它是一个视图,你应该如何解决问题,因为MVC将引导你暴露出口以允许控制器使用它们。 MVVM会引导您隐藏出口,以便视图传递给视图模型对象并在内部配置出口。

答案 4 :(得分:1)

  

@interface可以出现在.h文件(公共属性)和.m文件(私有属性)中。应该在.m文件中声明IBOutlets。

如果您有兴趣阅读topic

干杯!