界面中最好的类别或私有属性是啥

Posted

技术标签:

【中文标题】界面中最好的类别或私有属性是啥【英文标题】:What's preferable Categories or Private Attributes in the Interface界面中最好的类别或私有属性是什么 【发布时间】:2012-01-11 08:42:28 【问题描述】:

对于类中的属性,什么是可取的和干净的解决方案。在接口定义(.h 文件)中使用类别(匿名)或@private 注释。 属性不应被其他类继承。

BR, 我的贝克

【问题讨论】:

【参考方案1】:

首先阅读本文以了解@private 修饰符What does "@private" mean in Objective-C?

然后回答你的问题。

一个匿名类别称为 class extension,这是我用来保持 API 干净并且不公开宣布我的 ivars 的。

例如

// .h
@interface MyClass : NSObject

@end

// .m
@interface MyClass ()

@property (nonatomic, strong) NSDate *someDateImWorkingWith;

@end

@implementation MyClass

@synthesize someDateImWorkingWith = _someDateImWorkingWith;

@end

因此,我可以在我的班级中使用NSDate *someDateImWorkingWith,但是如果不进行一点挖掘,导入我的标题的人甚至不会知道它的存在。这对我很有效,您的里程可能会有所不同。

【讨论】:

【参考方案2】:

类别和@private 是两个不同的东西。类别扩展了您可以向类添加方法的类,@private 是其他类无法直接访问您的属性并且必须使用您的访问器的地方。如果您想要子类无法访问的 ivars,请在您的界面中使用 @private。

@interface MyClass : NSObject

@private
int num; //private attribute where subclass can't access

【讨论】:

以上是关于界面中最好的类别或私有属性是啥的主要内容,如果未能解决你的问题,请参考以下文章

子类将继承父类所有的方法和属性吗?为啥?

2-1 OC 类别(分类)

类别的作用?继承和类别在实现中有何区别?

版本号名称规范的常用或类别是啥?

Django - 动态模型参数值

iOS开发之category(类别)