我想从记忆的角度来看,如果我正在做的事情是正确的。
首先,我想重用的文件是UIViews
的子类。
在我的UIViewcontroller
中,我声明了一个这样的对象:
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
viewDidLoad
第一次初始化。
现在我需要重新使用这个对象level1view
,所以在我之后的一个方法中,我使用:
[level1view release];
level1view = [[Level1 alloc] init];
[self.view addSubview:level1view];
//Some methods...
从记忆的角度来看它是否正确?或者我该怎么办?
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
如果您没有参数更改,只想更多地拥有相同的视图,那么只需一次只分配一次,如下所示
- (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...
}
答案 2 :(得分:0)
使用singleton方法创建处理内存使用的实例,如下所示
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];
试试这样。
答案 3 :(得分:-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]);
当retainCount为0时,必须释放该对象。