0

記憶の観点から、私がやっていることは正しいのだろうか。まず、再利用したいファイルは のサブクラスですUIViews。myUIViewcontrollerでは、次のようにオブジェクトを宣言します。

World_1_ViewController.h :

#import "Level1.h"

@class Level1;

@interface World_1_ViewController : UIViewController <UIAccelerometerDelegate>
{
    Some things....
    Level1 * level1view;
}

World_1_ViewController.m :

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    level1view = [[Level1 alloc] init];
    [self.view addSubview:level1view];

    //Other things...
}

UIViewController World_1_ViewControllerメソッドで、 が開いているときに初めて init であることがわかりますviewDidLoad

ここで、このオブジェクトを再利用する必要があるlevel1viewため、後に続くメソッドの 1 つで、次を使用します。

[level1view release];
level1view = [[Level1 alloc] init];
[self.view addSubview:level1view];
//Some methods...

メモリの観点からは正しいですか?または私は何をすべきですか?

4

4 に答える 4

1
[level1view release];
level1view = [[Level1 alloc] init];
[self.view addSubview:level1view];
Some methods...

そのコードでは、そのように、現在のビューも superView から削除する必要があります

[level1view removeFromSuperview];
[level1view release];
level1view = [[Level1 alloc] init];
[self.view addSubview:level1view];
Some methods...

deallocまた、およびdidReciveMemoryWarningメソッドでlevel1viewを解放し、それをに設定する必要がありますnil

更新しました:

- (void)dealloc
{
   [level1view release];
   [super dealloc];
}

- (void)didReciveMemoryWarning
{
    [super didReciveMemoryWarning];
    if (!self.isViewLoaded) {
        [level1view release];
         level1view = nil;
    }
}
于 2013-03-22T09:27:26.447 に答える
0

パラメータの変更がなく、同じビューを複数回表示したい場合は、以下に示すように 1 回だけ割り当てます。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    if(level1view==nil)
         level1view = [[Level1 alloc] init];
    [self.view addSubview:level1view];

    Other things...
}
于 2013-03-22T09:25:08.350 に答える
0

このようなメモリ使用を処理するためのインスタンスを作成するには、シングルトンメソッドを使用します

   static Level1 *_sharedMySingleton;

  @implementation Level1

  +(Level1 *) getLevel1Instance
    {
        @synchronized([Level1 class])
        {
            if (!_sharedMySingleton)
            {
                _sharedMySingleton = [[self alloc] init];

            }
            return _sharedMySingleton;
        }
        return nil;
    }
@end

インスタンスの作成中にこれを置き換えます

level1view = [[Level1 alloc] init];
[self.view addSubview:level1view];

 level1view = [level1view removeFromSuperview];
level1view = [Level1 getLevel1Instance];
[self.view addSubview:level1view];

このようにしてみてください。

于 2013-03-22T09:35:43.300 に答える
-2

このような物件について宣言する必要があると思います。

@interface World_1_ViewController : UIViewController <UIAccelerometerDelegate>
{
    Some things....
    Level1 * level1view;
}

@property (nonatomic,strong) Level1 * level1view;

また、「自己」を使用します。または「_」は、setterまたはgetterを介して変数にアクセスします。

オブジェクトが解放されているかどうかを確認したい場合は、「retainCount」をチェックして、このように「-(NSUInteger)retainCount」を使用できます。

printf("%d\n", [_level1view retainCount]);

holdCountが0の場合、そのオブジェクトを解放する必要があります。

于 2013-03-22T09:44:26.510 に答える