2

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

类A.h

@interface ClassA : SomeSuperClass

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

@end

现在我的问题:

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

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

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

两种解决方案对我来说似乎都有效(没有测试它,只是假设它),但在我看来它们似乎有点矫枉过正(尤其是第一个)

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

4

1 回答 1

3

如果您对 B 的父级 (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
于 2012-12-14T22:20:15.907 回答