把@interface放在.m文件中的逻辑是什么?

8
2个回答

12
@interface MyClass(){
    NSInteger aInt;

}
@property(nonatomic,strong) NSString *name;
@end

这是一个类别扩展

使用现代编译器,这是在 MyClass 类中仅为私有使用声明方法、ivar 和属性的好方法。

类别扩展必须在主要实现文件中声明(而不是在类别中声明)。

这样,您可以从头文件中隐藏实现细节,使其保持私有。


1
你也可以创建实现属性,我觉得它们比类扩展更有用。 - Richard J. Ross III
@RichardJ.RossIII - 实现属性是什么?还有,我看到代码这样做,接口Header{} property(nonatomic,readonly) BOOL sessionDidExpire; end,然后在.m文件中,property(nonatomic,readwrite) BOOL sessionDidExpire; 这是什么东西? - itsaboutcode
确实,使用LLVM,你可以在@implementation MyClass { NSInteger aInt;}中声明ivars。但我喜欢将其分离成一个类扩展。 - vikingosegundo
@itsaboutcode 打扰一下,我是指实现 iVars,不过我使用 ARC 很多,所以现在两者之间没有太大的区别了。 - Richard J. Ross III
1
这是一个公共只读属性,但在类内部也可以对其进行写操作 - 非常方便。 - vikingosegundo
显示剩余2条评论

3
这已经成为一种常见的做法,用于声明给定类的“私有”属性/方法。通过在.m文件中声明一个匿名类扩展来声明它们,这些属性/方法不会暴露给消费对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接