我已经读了一些关于这方面的帖子,但有一件事我还不清楚。我知道这可能是一个n00b问题,但实际上我在没有完全掌握这个基本问题的情况下已经进入了相当长的发展阶段。我想这是自学成才的症状。
您在头中声明一个变量,如下所示:
@interface SomeClass : NSObject {
NSMutableArray *anArray;
}
@property (nonatomic, retain) NSMutableArray *anArray;
end
然后在主文件中对其进行合成,并将其设置为初始值:
@implementation SomeClass
@synthesize anArray
- (SomeClass *)init{
if (self = [super init]) {
self.anArray = [[NSMutableArray alloc] initWithCapacity:10];
}
[return self];
并在你的班级解除锁定时释放它:
- (void)dealloc {
[anArray release];
[super dealloc];
}
现在,当我运行仪器时
self.anArray = [[NSMutableArray alloc] initWithCapacity:10];
被识别为内存泄漏。这是内存泄漏吗?因为当您在头中定义变量anArray时,它会分配内存?(因为我认为它是一个空指针。)因此,当你想初始化它,并调用[[NSMutableArray alloc]initWithCapacity:10]时,你正在重新分配内存,并丢失指向原始分配的指针?
因此,我使用方便类方法:
@implementation SomeClass
@synthesize anArray
- (SomeClass *)init{
if (self = [super init]) {
self.anArray = [NSMutableArray arrayWithCapacity:10];
}
[return self];
这不再被确定为仪器中的内存泄漏。由于这是一种方便的方法,anArray是自动发布的。但是,如果我假设头中的实例声明分配内存,这将解释前面的问题,那么我是否仍然应该释放anArray?以这种方式设置初始值可能会保留它吗?
我理解
NSMutableArray *anArray = [[NSMutableArray alloc] initWithCapacity:10];
和
NSMutableArray *anArray = [NSMutableArray arrayWithCapactiy:10];
but what I m not sure I underst和is when you ve declared NSMutableArray *anArray in your header, which of the two approaches you should use 和why. And whether or not if you use the second approach, you should still release anArray when you call dealloc.
我可以补充一点,我发现以下帖子/链接很有用: