有没有办法允许某些类访问某些其他类的私有属性?

zak*_*ces 2 encapsulation scope objective-c private-members ios

我有2个类,我希望能够访问彼此的属性,但我不希望从其他任何地方访问这些属性.有没有办法做到这一点?是通过子类化实现这一目标的唯一方法吗?有没有办法在两个班级之间建立"特殊"关系?

bbu*_*bum 12

如果我理解你的问题,你有效地希望A类和B类(与继承无关)知道比公开宣传更多的内脏吗?

Say A有一个名为innardsForBB的实例应该访问的属性.您可以使用类扩展来声明A的非公共接口.


@interface A:NSObject
... regular class goop here ...
@end
Run Code Online (Sandbox Code Playgroud)


A-Private.h

@interface A()
@property(nonatomic, strong) Innards *innardsForB;
@end
Run Code Online (Sandbox Code Playgroud)


上午

#import "A.h"
#import "A-Private.h"

@implementation A
// because "A-Private.h" is #import'd, `innardsForB` will be automatically @synthesized
...
@end
Run Code Online (Sandbox Code Playgroud)


BM

#import "B.h"
#import "A-Private.h"

@implementation B
...
- (void)someMethod
{
     A *a = [self someASomewhere];
     a.innardsForB = [[Innards alloc] initForMeaning:@(42)];
}
Run Code Online (Sandbox Code Playgroud)

  • 正确; `@interface A()`是类扩展.它意味着"扩展A类,使其具有这一额外的声明集".只要编译`@ implementation`时编译器可以看到该扩展,那么扩展中的所有声明就像它们在类的`@interface`中声明的那样. (2认同)