2

逆方向をたどるようなことは可能ですか?

【通常は物件の方向】

@interface MainClass {
  CustomClass *test1;
 }
 @end

 @implementation MainClass
  self.test1 = [[CustomClass alloc] init];
 @end

[プロパティの逆方向について疑問に思う]

test1からselfまでを示すことは可能ですか?

ex) like test1.myowner? or test1<-self? or test1/self or etc..
4

4 に答える 4

3

いいえ、プロパティは単方向です。逆プロパティを明示的に定義し、それに割り当てる必要があります。

2つのオブジェクトが相互に参照しているため、保持サイクルを導入しないように注意する必要もあります。プロパティの1つだけを保持/強力にする必要があります。そうしないと、解放できない2つのオブジェクトになってしまいます。

于 2012-08-08T12:47:26.133 に答える
1

いいえ、そうではありません。設定されているオブジェクトから、プロパティが設定されているオブジェクトに関連付けることはできません。ほぼ確実に、のプロパティを宣言してからCustomClass、のセッターでMainClass、のインスタンスのプロパティをに設定しCustomClassますself

于 2012-08-08T12:46:44.403 に答える
1

たとえば、setterメソッドに手動で実装することで、この種の動作を自分で実装できます。

- (void)setTest1:(CustomClass *)aCustomClass
{
    test1 = aCustomClass;
    test1.myowner = self;
}

循環保持ループを回避するために、myownerプロパティをCustomClassに追加し、weakまたはunsafe_unretainedにする必要があります。

于 2012-08-08T12:51:39.483 に答える
0

ここでバラバラにすることがたくさんあります。まず第一に、宣言するほとんどすべてのクラスはから継承する必要がありますNSObject

@interface MainClass : NSObject {

@propertyインスタンス変数を作成するには、を使用する必要が@synthesizeあります。実行しようとしているようにiVarを割り当てないでください。次のように書く方がよいでしょう。

 @interface MainClass : NSObject 
 @property(nonatomic, retain) CustomClass *test1;
 @end

 @implementation MainClass
 @synthesize test1;

 // only if you're not using ARC
 -(void)dealloc {
     [test1 release];
     [super dealloc];
 }

 @end

例)test1.myownerのように?またはtest1<-self?またはtest1/selfなど。

これらはすべて間違っています。test1からMainClassのインスタンスにアクセスする場合は、そのクラスでインスタンス変数を宣言し、そのインスタンス変数に「self」を設定する必要があります。MainClassインスタンスが1つしかない場合は、シングルトンとして実装することをお勧めします。

于 2012-08-08T12:47:47.840 に答える