在Objective-C中创建私有属性

8
在Objective-C中,有一种类似于hack的方法可以创建私有方法,在.m文件中:
@interface FooClass (PrivateMethods)
- (void) doBar:(id)barAction withBaz:(id)bazAction;
@end

这对于方法非常有效。我尝试对属性进行相同的操作:

@interface BarClass (PrivateMethods)
@property (nonatomic, strong) BazObject *myBaz;
@end

@implementation BarClass
@synthesize myBaz = _myBaz;
[...]
@end

这会导致编译警告:类别 'PrivateMethods' 中声明的属性不能在类实现中实现。我试图将我的属性移动到一个类别中:
@implementation BarClass (PrivateMethods)
@synthesize myBaz = _myBaz;
@end

那么: @synthesize 不允许在类别的实现中使用。

显而易见的答案是“放弃尝试,只使用实例变量”,但我曾被苹果公司的人告知他们已经(个人)完全使用属性。它们带来的安全性(像枪上的安全装置,使自己不容易误伤)让我内心感到非常愉悦,所以有没有任何方法可以在不使用裸露的实例变量的情况下实现这一点?

2个回答

18

4
这是我所做的,对我有效。改变在于您不再创建类别,而是创建类本身的扩展。
@interface BarClass ()
@property (nonatomic, retain) BazObject *myBaz;
@end

@implementation BarClass
@synthesize myBaz = _myBaz;
[...]
@end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接