0

私は自分の UIView を持っています:

#import <UIKit/UIKit.h>

@interface MultipleSlotsClientView : UIView


-(IBAction)didPressCloseBtn:(id)sender;

@end

そして、これは実装です:

@implementation MultipleSlotsClientView

- (id)initWithFrame:(CGRect)frame {
    self = [[[[NSBundle mainBundle] loadNibNamed:@"MultipleSlotsClientView" owner:self options:nil] objectAtIndex:0] retain];
    if (self) {
        self.frame = frame;
    }
    return self;
}

#pragma mark
#pragma mark IBAction

-(IBAction)didPressCloseBtn:(id)sender {
    [self removeFromSuperview];
}

@end

メソッドに接続するdidPressCloseBtnボタンがあり、ボタンを押すとメソッドが呼び出されますが、ビューはスーパービューから削除されません。

これは、UIView を割り当てて追加する方法です。

MultipleSlotsClientView *multiView = [[[MultipleSlotsClientView alloc] initWithFrame:self.view.frame] autorelease];
[self.view addSubview:multiView];

ビューが消えない理由は何ですか?

4

3 に答える 3

2

以下のスクリーンショットのように接続してみてください。FileOwner には接続しないでください。ここに画像の説明を入力

于 2013-05-15T09:21:19.750 に答える
0

コメントへのお返事です。コメントをうまくフォーマットできないからです。コードでメモリ リークが発生する理由と、問題を解決するためのコードの記述方法について説明します。

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Do something here if you have to.
        // Currently there is no reason for overwriting intiWithFrame: at all. 

    }
    return self;
}

そして代わりに:

MultipleSlotsClientView *multiView = [[[MultipleSlotsClientView alloc] initWithFrame:self.view.frame] autorelease];

ただ行う:

MultipleSlotsClientView *multiView= [[[[NSBundle mainBundle] loadNibNamed:@"MultipleSlotsClientView" owner:self options:nil] objectAtIndex:0] autorelease];
multiView.frame = self.view.frame;

それを保持するか、自動解放するか、またはそのようなものをまったく使用しないかは、他のコードに依存します。それを保持するサブビュー階層に multiView を追加すると仮定すると、自動解放は問題ありません。

于 2013-05-15T12:25:10.837 に答える