2

2 つのクラス (ClassA、ClassB) があるとします。

ClassA.h

@interface ClassA : SomeSuperClass

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

@end

今私の問題:

classB インスタンスの NSString someString にアクセスしたい。これを達成する最良の方法は何ですか?私は2つの解決策を考えていました:

classB でプロトコルを作成し、classA をこのプロトコルに応答させます。このプロトコルの唯一の方法は、この文字列にアクセス/変更することです。

私が思いついた 2 番目の解決策は、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 に答える