Obj-C,一切的属性

时间:2012-01-24 16:10:33

标签: objective-c properties getter-setter

我已经开始在一家新公司工作,而我的团队负责人告诉我要遵守的一条指导原则是很少使用保留/发布,而是依赖于内存管理的属性。我可以看到保持代码清晰并减少错误空间的吸引力,但打开这样的界面让我感到不舒服。一般来说,这个架构非常好,但我一直都很迂腐,把我的课程关闭到外面。

在objective-c中使用这样的属性是一种公认​​的设计方法吗?任何人都可以向我提供链接或线索,我的新团队可能会采取这种策略吗?

2 个答案:

答案 0 :(得分:10)

无需向全世界公开属性。在您的实现.m文件中,您可以添加一个类别来声明“私有”属性。 E.g。

#import "Class.h"

@interface Class ()
@property (nonatomic, strong) NSDate *privateProperty
@end

@implementation Class

@synthesize privateProperty;

...
@end

Objective-C中的任何内容都不是严格意义上的私有,所以我认为这是一个很好的做法 - 它隐藏了几乎所有的保留/发布内容而不需要兼容ARC的运行时,并且具有不兼容的副作用要求你在标题中提到你的实例变量(尽管还有其他方法可以实现)。

作为历史记录,我认为这是将实例变量移出标题的第一种方式 - 这只是iOS和64位Intel 10.6+上的'new'运行时允许的 - 这可能是次要原因为什么你的团队已经确定了它。除非他们明确告诉你让你的课程透明化,否则他们实际上可能完全同意你的感觉(以及公认的面向对象原则),实现应该是不透明的。

答案 1 :(得分:2)

您无需公开声明您的财产。使用类类别或类扩展,您可以将属性放在实现中。

例如:

// in AnObject.h
@interface AnObject : NSObject
@end

// in AnObject.m
@interface AnObject () // () is class extension, (foo) is a class category
@property (retain) NSString *foo;
@end

@implementation AnObject
@synthesize foo;
@end

有关详细信息,请参阅Apple的文档。