2011-12-03 16 views
2

スーパービューからビューを削除するにはremoveFromSuperviewを使用しています。私はまたremoveFromSuperviewの後にreleaseを使用しています、時にはうまく動作することがありますが、時には悪いアクセスを与えます。はremoveFromSuperviewオブジェクトを解放しますか?

removeFromSuperviewまた、オブジェクトにreleaseを呼び出しますか?

答えて

1

はい、removeFromSuperviewも表示されます。

スーパービューに追加した後でビューを解放する必要があります。

CGRect frame; // let's assume you already have defined frame and superview 
UIView *superview; 

UIView *subview = [[UIView alloc] initWithFrame:frame]; 
[superview addSubview:subview]; 
[subview release]; 

それとも、あなたがビューを作成するときに、autoreleaseを使用しています。どちらの場合も

UIView *subview = [[[UIView alloc] initWithFrame:frame] autorelease]; 
[superview addSubview:subview]; 

、あなたがremoveFromSuperviewを呼び出した後releaseを呼び出す必要はありません。

0

はい、addSubviewの呼び出しはretain、removeFromSuperviewの呼び出しはreleaseを呼び出します。したがって、あなたの呼び出しはそこに属しません(おそらく、あなたがオブジェクトを保持したくないと仮定して、サブビューを割り当てた後に属します)。

0

実際にはremoveFromSuperviewは、ビューオブジェクトのretainCountプロパティを減らします(release)。

だから、もしあなたがAleksejsのやり方をすれば。

UIView *subview = [[UIView alloc] initWithFrame:frame]; 
[superview addSubview:subview]; 
[subview release]; 

subview - >alloc = retainCount = +1、

subview - >addSubView = retainCount = +1

subview - >release = retainCount = -1。

subview - >removeFromSuperView = retainCount = -1

(サブビューをメモリから削除)

+0

絶対保持カウントは無用です(-retainCountはゼロを返すことはできません)。デルタの点で考える。 – bbum

+0

なぜ役に立たないのかの詳細は、https://developer.apple.com/documentation/objectivec/1418956-nsobject/1571952-retaincount?language=objcを参照してください。 –

0

正解は "おそらく" です。これは実際には考えてはいけない実装の詳細です。あなたのコードがサブビューで作業する必要がある場合は、作業を開始する前にそれを保持しておく必要があります。作業を終えたらリリースする必要があります(スーパービューから取り除くことと一致する場合もあればそうでない場合もあります) )。

このテストでは、removeFromSuperviewがビューを解放していることをテストで確認できますが、この動作に依存することはできません。たとえそれがいつも起こっても、将来はそうではないかもしれません。

このような低レベルでのメモリ管理について考える必要はありません。 retainまたはcopyまたはallocまたはnewのオブジェクトを保持している場合は、今後、ある時点で反動する責任を負うものとします(release)。

これらのことをしていない場合は、リリースしないでください。ビューにサブビューを追加する方法には、名前にretainまたはcopyが含まれていないため、ではありません。はスーパービューから削除するときに自分で解放するはずです。

ビューシステムは非常に複雑です。特に、限られた量のRAMを搭載したiPhoneでは、仮想メモリを使用するにはストレージが不十分です。ルールに固執して、あなたは大丈夫でしょう。 ARCを有効にする。

関連する問題