9

.h将类扩展放在他们自己的文件中并#import有选择地获得类的方法和属性的不同级别的可见性是否有意义?如果这是一个坏主意(或行不通),为什么?

4

2 回答 2

15

这是一个好主意,并且正是设计类扩展的原因(以及为什么它们与类别不同)。

即,您可以:

Foo.h

@interface Foo:NSObject
...public API here...
@property(readonly, copy) NSString *name;
@end

Foo_FrameworkOnly.h

@interface Foo()
@property(readwrite, copy) NSString *name;
@end

Foo.m

#import "Foo.h"
#import "Foo_FrameworkOnly.h"

@interface Foo()
... truly implementation private gunk, including properties go here ...
@end

@implementation Foo
@synthesize name = name_;
@end

并且有效地拥有一个公共只读和私有读写的属性,仅用于导入 Foo_FrameworkOnly.h 的实现文件。

于 2011-08-18T16:38:34.830 回答
-2

Objective-C 中的类扩展(相对于子类化)是通过类别完成的。在 Xcode 中,转到文件 > 新建 > 文件并选择 Objective-C 类别。它将询问您如何调用该类别以及它应该扩展什么类。您将获得一个 .h/.m 对,分别用于放置您的接口和实现。如果您想访问扩展程序中提供的功能,只需导入其 .h 文件。

于 2011-08-18T16:31:41.130 回答