【发布时间】:2011-10-29 22:41:25
【问题描述】:
有选择地将类扩展放在它们自己的.h 文件和#import 中以获得类的方法和属性的不同级别的可见性是否有意义?如果这是一个坏主意(或行不通),为什么?
【问题讨论】:
标签: objective-c class-extensions
有选择地将类扩展放在它们自己的.h 文件和#import 中以获得类的方法和属性的不同级别的可见性是否有意义?如果这是一个坏主意(或行不通),为什么?
【问题讨论】:
标签: objective-c class-extensions
Objective-C 中的类扩展(与子类相反)是通过类别完成的。在 Xcode 中,转到文件 > 新建 > 文件并选择 Objective-C 类别。它将询问您如何调用该类别以及它应该扩展什么类。您将获得一个 .h/.m 对,分别用于放置您的接口和实现。如果您想访问扩展程序中提供的功能,只需导入其 .h 文件即可。
【讨论】:
@implementation 块中实现。”
这是一个好主意,也正是设计类扩展的原因(以及它们与类别不同的原因)。
也就是说,您可以:
@interface Foo:NSObject
...public API here...
@property(readonly, copy) NSString *name;
@end
@interface Foo()
@property(readwrite, copy) NSString *name;
@end
#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 的实现文件。
【讨论】: