ではありません私は有効ARCでのObjective-Cで次のように気づい:のは、単純なクラスAを持ってみましょう弱い性質がのdeallocにnilに設定されますが、プロパティのIVARがnil
をして
@interface A
@property (nonatomic, weak) id refObject;
@end
@implementation A
@end
弱い性質をautosynthesizedと
:deallocを持つ2番目のクラスBは@interface B
@end
@implementation B
-(void) dealloc
{
NSLog(@"In dealloc");
}
@end
そして最後にどこかのクラスAで次を実施しています
@implementation A
...
-(void) foo
{
B* b = [B new];
self.refObject = b;
// Just use b after the weak assignment
// in order to not dealloc 'b' before assignement
NSLog(@"%@", b);
}
...
@end
私は[B dealloc]
にブレークポイントを設定し、[A refObject]
プロパティを検査した場合、私はa.refObject
がnilであるが、a->_refObject
が「B」にゼロとポイントではないことがわかります
それがなぜ起こるか任意のアイデア?
弱い参照をクリアすべきであることが分かっているにもかかわらず、アクセッサメソッドは 'nil'を返すかもしれませんが、インスタンス変数自体はそのまま残されています(割り当てが解除され、今はダングリングポインタです)。 –
私はdeallocではオブジェクトはまだ有効で、まだ削除されていないと思います。たとえばNSNotificationCenterから登録を解除し、そのプロパティにアクセスできます。 –
「アクセスできます」とは必ずしも割り当て解除されていないわけではありませんが、間違っている可能性があります。 –