2012-02-19 6 views
3

私はlastObjectが削除取得にもかかわらず、メモリ内に残っていることに驚いコードNSMutableArrayのlastObjectはオブジェクトのコピーを返しますか?

NSNumber *lastObject = [self.myStack lastObject]; 

if(lastObject){ 
    [self.myStack removeLastObject]; 
} 

return [lastObject doubleValue]; 

のこの作品に関連した質問があります。 どうしたのですか? lastObjectはオブジェクトのコピーを返しますか?

答えて

4

いいえ、コピーではなく、ただオートレリースされています。それは近い将来にリリースされる予定です。

編集:明確にする - [self.myStack removeLastObject]に、オブジェクトがすぐにreleaseを送っているが、配列はオブジェクトの最後の所有者ではありませんので、あなたは[self.myStack lastObject]から自動解放ポインタを得ました。

+0

削除後もまだアクセスしていますか? ところで、私はメモリ管理のためにiOS 5のリファレンスカウントに依存しています。 – user1204481

+2

これを拡張するには、Objective-Cのオブジェクトの標準的なゲッター動作は、 ' - (Object *)property {return [[property retain] autorelease]; } '返されるものは、あなたがゲッターを呼び出したオブジェクトの寿命が短い場合であっても、オートリリースプールの存続期間中に安全に使用できることが保証されています。 NSArrayは配列メンバのこのパターンに従います。 – Tommy

+0

配列内にある最後のオブジェクトでは、リリースは呼び出されませんが、リリースされていませんか? – user1204481

関連する問題