在Objective-C中创建私有属性

wjl*_*wjl 8 properties private objective-c

在Objective-C中,有一种在.m文件中创建私有方法的hackish方法:

@interface FooClass (PrivateMethods)
- (void) doBar:(id)barAction withBaz:(id)bazAction;
@end
Run Code Online (Sandbox Code Playgroud)

这适用于方法.我试图对一个属性做同样的事情:

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

@implementation BarClass
@synthesize myBaz = _myBaz;
[...]
@end
Run Code Online (Sandbox Code Playgroud)

这带来了编译警告:在类'PrivateMethods'中声明的属性无法在类实现中实现.我试图将我的财产转移到一个类别:

@implementation BarClass (PrivateMethods)
@synthesize myBaz = _myBaz;
@end
Run Code Online (Sandbox Code Playgroud)

然后: @synthesize is not allowed in a category's implementation.

答案显然是"停止尝试,只是用实例变量",但我已经被人在苹果告诉他们(个人)完全使用属性感动.他们带来的安全性(如枪上的安全性,更难以在脚中射击自己)让我内心都很开心,所以有没有办法在不借助裸体伊娃的情况下做到这一点?

小智 17

使用类扩展而不是类别(请注意括号内没有类别名称):

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

@implementation BarClass
@synthesize myBaz = _myBaz;
[...]
@end
Run Code Online (Sandbox Code Playgroud)

您可能也想阅读这个问题(和答案):私有的@property是否创建了一个@private实例变量?