在Objective-C中使用类扩展来选择性可见性

Dan*_*ark 9 objective-c class-extensions

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

bbu*_*bum 15

这是一个很好的主意,也正是为什么要设计Class Extensions(以及为什么它们与类别不同).

即,你可以:

foo.h中

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

Foo_FrameworkOnly.h

@interface Foo()
@property(readwrite, copy) NSString *name;
@end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

并且有效地具有公开只读和私有读取的属性,仅用于导入Foo_FrameworkOnly.h的实现文件.