2017-07-18 5 views
-1

クラスでallocを呼び出すと、オブジェクトの参照カウントが1になるかどうか。例:NSObject *obj = [NSObject alloc];、このコード行が実行された後、オブジェクトの参照カウントは0または1ですか?私はソースコードを読んで、私はいくつかのコードを見つけることができませんalloc参照カウント上の操作のためのメソッド。参照カウント0のオブジェクトは、オブジェクトが破壊される場合、それはどのように達成するか、誰かが混乱を解決するのに役立つかどうか、ありがとう!クラスがallocメソッドを通してオブジェクトを作成するとき、オブジェクトの参照カウントは1に変わるか?

答えて

0

allocメソッドはオブジェクトを作成します参照カウントは1に計算されます。オブジェクトを作成し、保持したクラスを意味します。

メソッドにローカルオブジェクトを作成し、それを解放するのを忘れると、メモリがリークします。手動でリリースする必要があります:[obj release];

オブジェクトが割り当てられた場合、保持カウントを1に設定する操作はありません。オブジェクトを保持する他のクラスがない場合、参照カウントを呼び出すメソッドは1を返します。別のオブジェクトが現在のオブジェクトを保持している場合、現在のオブジェクトの参照テーブルはその保持を保存します。結果は計算によって増やされます。メソッドソース:それは、ブロックの外まで

uintptr_t 
objc_object::sidetable_retainCount() 
{ 
    SideTable& table = SideTables()[this]; 

    size_t refcnt_result = 1; 

    table.lock(); 
    RefcountMap::iterator it = table.refcnts.find(this); 
    if (it != table.refcnts.end()) { 
     // this is valid for SIDE_TABLE_RC_PINNED too 
     refcnt_result += it->second >> SIDE_TABLE_RC_SHIFT; 
    } 
    table.unlock(); 
    return refcnt_result; 
} 
+0

私は "alloc"ソースを読んで、オブジェクトにスペースを開くためにメモリ内にしかないことを発見しました。オブジェクトへの参照は何もありませんでしたが、参照カウントのオブジェクトは1 ? –

+0

@Rushtoasktheway、回答が更新されました。 –

+0

あなたが提供するメソッドは、オブジェクトが "retainCount"で使用されたときに実行されるメソッドです。 "retaionCount"メソッドを呼び出さないと、このメソッドは実行されたくないので、 "alloc"メソッドのTimeを呼び出すと、このメソッドが実装されませんでした。 –

0

それは、カウントを保持だが1です。 もう1つのオブジェクトが必要です。保持カウントは1ずつ増加します。 誰も必要がなくなるまで存在します。

関連する問題