私は2つのオブジェクトを格納するNSMutableArrayを持っていますが、しばらくすると配列のnilに置き換えられます。なぜそれが起こっているのですか?配列オブジェクトはまだ周囲にあり、2つのオブジェクトが含まれていることを示していますが、両方ともnilです。NSArrayのオブジェクトはARCの下でnilに設定されます
配列に含まれているということは、それらが参照されていて削除されるべきではないということですか?
奇妙なのは、配列に置いたオブジェクトが他のオブジェクトによって参照されているときに削除されていないということです。配列のnilに置き換えられているだけです。
-(void)addRender:(id)theRender
{
if (renderArray == nil)
renderArray = [NSMutableArray array];
// Leaving this function and for a while afterwords, the object is in the array.
// By afterwords, I think is until the autorelease pool is drained, but I can't
// be sure but the objects are there as I am stepping though code.
[renderArray addObject:theRender];
}
-(void)render
{
// By the time this is called, renderArray has 2 nil objects in it.
if (renderArray)
[renderArray makeObjectsPerformSelector:@selector(render)];
}
-(void)addRender
関数がオブジェクトinit関数から呼び出されています。私はそれが重要かどうかわからないが、自己はそれによって設定される。
オブジェクト自体は削除されておらず、配列のnilに置き換えられました。 ARCにはどのような条件がありますか?私はこのようなことをする弱い参照をゼロにすることについて読んだことがありますが、弱い参照を宣言しているわけではありません。
私はこの2時間を頭に打ち負かすことに過ごしました。
すべてのコードを共有してください。 – Devraj
renderArray変数はどのように定義されていますか? – MyztikJenz
次のように定義されています: 'NSMutableArray * renderArray;' –