我已经开始在一家新公司工作,而我的团队负责人告诉我要遵守的一条指导原则是很少使用保留/发布,而是依赖于内存管理的属性。我可以看到保持代码清晰并减少错误空间的吸引力,但打开这样的界面让我感到不舒服。一般来说,这个架构非常好,但我一直都很迂腐,把我的课程关闭到外面。
在objective-c中使用这样的属性是一种公认的设计方法吗?任何人都可以向我提供链接或线索,我的新团队可能会采取这种策略吗?
答案 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的文档。