我正在使用以下代码来创建NSMutableArray。当我在“配置文件”模式下运行相同时,它显示内存泄漏。
SampleArray.h
@interface SampleArray: NSObject {
}
@property (assign, retain) NSMutableArray *array;
@end
SampleArray.m
#import "SampleArray.h"
@implementation SampleArray
@synthesize array;
-(void) viewDidLoad {
self.array =[ [NSMutableArray alloc] init];
}
-(void) viewWillDisappear:(BOOL)animated {
[self.array release];
}
@end
当我使用autorelease时,我无法在其他函数或方法中访问它并返回null值。请帮我找到问题。
答案 0 :(得分:1)
在viewWilLDisappear中发布此数组不是一个好主意,您应该在dealloc函数中释放。您应该担心过度释放此项并导致程序崩溃,因为viewWilLDisappear可能会在此ViewController的生命周期内多次调用。
无论如何,你是双重保留项目,因为你的财产有一个保留(并使其非原子,不分配),添加自动释放到您的alloc / init:
self.array =[[[NSMutableArray alloc] init] autorelease];
并移动
[array release];
到你的dealloc函数。或转换为ARC,不再担心......
答案 1 :(得分:0)
尝试将其设置为(非原子,保留),然后自动释放。
答案 2 :(得分:0)
首先,我假设您正在使用
@property (nonatomic, retain) NSMutableArray *array;
使用此
-(void) viewDidLoad {
array =[[NSMutableArray alloc] init];
}
-(void) viewWillDisappear:(BOOL)animated {
[array release];
}
我建议您使用dealloc而不是viewWillDisappear
-(void) dealloc {
[array release];
[super dealloc];
}
您的代码说明
-(void) viewDidLoad {
// here you are allocating a mutable array thus retain count becomes one
// then you are assigning it to the property which is retain and thus retains it
// making the retain count 2
self.array =[ [NSMutableArray alloc] init];
}
-(void) viewWillDisappear:(BOOL)animated {
// here you are releasing it so its retain count becomes 1 from 2
// thus shows memory leak
[self.array release];
}
答案 3 :(得分:0)
最好在-dealloc()中处理内存解除分配,并在-viewDidUnload()
中将数组设置为nil以更安全所以它将是:
-(void) viewDidUnload
{
self.array = nil;
}
-(void) dealloc
{
[array release];
[super dealloc];
}
和其他人一样说,将您的财产声明为(非原子,保留)而不是(分配,保留)