声明。
@property (nonatomic, retain) footballResultsParser * FBRP;
分配方法。
-(void) viewDidLoad
{
if (FBRP == nil)
{
FBRP = [[footballResultsParser alloc] init];
[FBRP updateResults];
}
}
这是在viewDidLoad中分配对象的正确和安全的方法吗? 我假设可能会多次调用viewDidLoad并且该对象可能已经存在。
安全地解除安全。
-(void) dealloc
{
if (FBRP != nil)
{
[FBRP release];
}
}
有没有更好的方法来进行内存管理呢?
答案 0 :(得分:3)
您还应该在viewDidUnload中释放它们。作为参考,以下是UIViewController class reference中的相关文档。
当发生低内存警告时, UIViewController类清除它 视图是否知道它可以重新加载或 之后再次重新创建它们。如果这 发生了,它也叫 viewDidUnload方法给你的代码 有机会放弃对。的所有权 任何与之关联的对象 视图层次结构,包括对象 加载了nib文件, 对象 在viewDidLoad方法中创建 , 和运行时懒惰创建的对象 并添加到视图层次结构中。 通常,如果您的视图控制器 包含出口(属性或原始 包含IBOutlet的变量 关键字),你应该使用 viewDidUnload方法放弃 这些商店的所有权或任何 其他与视图无关的数据 需要更久。
顺便说一句,在发布时,你不必检查对象是否为零。发送消息给nil什么都不做,这是安全的。
答案 1 :(得分:2)
由于你将FBRP属性设置为retain,并且正在利用我假设的合成,那么只需使用:
self.FBRP = [[[footballResultsParser alloc] init] autorelease];
在viewdidload中(通常)并在dealloc中释放。由于保留在财产上,保留计数应该在自动释放后仅增加1(是的,使用self。表示法)
答案 2 :(得分:0)
您应该在init方法中分配实例,而不是viewDidLoad方法。 你应该初始化变量_FBRP(或你如何称呼它),但不是属性。
-(id)init
{
if (self = [super init])
{
_FBRP = [[footballResultsParser alloc] init];
}
return self;
}
和dealloc
-(void) dealloc
{
[FBRP release];
[super dealloc];
}