【发布时间】:2009-08-14 23:19:43
【问题描述】:
这不是风格问题。它更多地是关于正确使用语言本身。我对编程很陌生,而且我对 Objective-C 和 Cocoa 完全陌生,但是在阅读了该语言并查看了一些示例代码之后,一些使用模式继续弹出,这对我来说没有意义。或者更确切地说,它们在我看来不是最优的。我希望你们都可以帮助教育我正确使用其中一些语言结构。
接口与协议
我理解与抽象相关的接口和实现的概念。然而,我在 Objective-C 示例代码中看到的主要模式如下...
@interface Foo : NSObject
{
some ivars decls
}
some methods decls
@end
然后客户端代码形式为...
Foo* f = [[Foo alloc] init];
这对我来说似乎很奇怪。 Foo 在我看来似乎是一个实现(不管@interface 关键字的不幸命名如何)。在我看来,接口不会暴露实例变量。此类的客户不应接触到我的实现细节。
Objective-C 确实有 @protocol 关键字,在我看来它更像是一个接口而不是 @interface 关键字。它允许您定义方法和/或属性,仅此而已。没有执行。没有实例变量。只是界面。
@protocol Foo <NSObject>
some methods
maybe some properties
@end
@interface FooProvider : NSObject
+ (FooProvider*) sharedProvider;
- (id<Foo>) fooWithBlahBlah;
@end
所以客户端代码将采用...的形式
id<Foo> f = [[FooProvider sharedProvider] fooWithBlahBlah];
[f whatever];
这似乎(至少在我看来)是一种更抽象的语言用法,并将客户端与他们不依赖的实现细节隔离开来。我的问题是我应该努力遵循哪个。我知道在某些情况下,一种情况比另一种更可取,但一般来说,一种情况应该是常态,而另一种情况应该是例外情况?
我们将不胜感激。
谢谢, 罗马
【问题讨论】:
标签: objective-c cocoa