-1

オブジェクトがUIViewあり、を使用してサブビューとして追加し[self.view addSubview:mySubView];ます。その後、電話をかけ [mySubView removeFromSuperview];てみましたが[mySubView release];、ここでアプリがクラッシュします。

RemoveFromSuperviewまた、呼びかけreleaseますmySubViewか?

4

3 に答える 3

4

はい、removeFromSuperviewビューを解放します。

ドキュメントを確認しましたか?約5秒かかります:

ディスカッション
受信者のスーパービューがそうでないnil場合、スーパービューは受信者を解放します。retainビューを再利用する場合は、このメソッドを呼び出す前に必ずビューを再利用し、release後で必要に応じて再度呼び出してください。

于 2012-10-10T12:14:23.237 に答える
3

はい、スーパービューはすべてのサブビューを保持するため、ビューを削除すると、スーパービューによって解放されます。

于 2012-10-10T12:14:14.467 に答える
2

あなたのコードを投稿してください、さもなければ答えるのは難しいです

クラッシュコード

UIView *subview = [[UIView alloc] init]; //manual allocation
[self.view addSubView:subview]; //view retained automatically
[subview release]; //released the manual allocated memory

for(UIView *subview in [scrollView subviews]) {    

    [subview removeFromSuperview]; //released the view retained automatically. Now retain count reach 0/
   [subview release]; // crash.....
}

クラッシュのないコード

UIView *subview = [[UIView alloc] init]; //manual allocation
[self.view addSubView:subview]; //view retained automatically   

[subview removeFromSuperview]; //released the view retained automatically. Now retain count reach 1

[subview release]; // No crash .retain count reach 0

明示的に割り当てたり保持したりしていないものを解放することはありません。

于 2012-10-10T12:23:55.170 に答える