Objective-C:访问另一个类的属性

时间:2012-12-14 22:17:46

标签: objective-c ios

假设我有两个类(ClassA,ClassB)

ClassA.h

@interface ClassA : SomeSuperClass

@property (some Attributes) ClassB *classB;
@property (some Attributes) NSString *someString;

@end

现在我的问题:

我想访问classB实例中的NSString someString。什么是实现这一目标的最佳方式? 我在想这两个解决方案:

在classB中创建协议,让classA响应此协议。该协议中唯一的方法是访问/更改此字符串。

我提出的第二个解决方案是在创建classB实例后将此字符串作为参数,然后classB可以存储对它的引用,并且可以随时更改它。

这两个解决方案似乎对我有用(没有测试它,只是假设它),但它们在我看来有点矫枉过正(特别是第一个)

让我知道最好的方法,谢谢。

1 个答案:

答案 0 :(得分:2)

如果您对B&#39的父级(A)做了弱引用,那么您可以安全地访问它的属性而无需过度杀伤或创建保留周期。

@interface ClassA : SomeSuperClass

@property (some Attributes) ClassB *classB;
@property (some Attributes) NSString *someString;

@end


@implementation

-(id)init {
    if (self = [super init]) {
        _classB = [[ClassB alloc]initWithParent:self];
    }
}

@end

@class ClassA;
@interface ClassB : SomeSuperClass

@property (nonatomic, weak) ClassA *classA;

-(id)initWithParent:(ClassA*)parent;

@end

#import "ClassA.h"
@implementation 

-(id)initWithParent:(ClassA*)parent {
    if (self = [super init]) {
        _classA = parent;
        NSLog(@"%@", self.classA.someString); //perfectly legal
    }
}

@end