Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c iOS内存管理_Objective C - Fatal编程技术网

Objective c iOS内存管理

Objective c iOS内存管理,objective-c,Objective C,Leaks告诉我以下是内存泄漏,但我不确定原因 标题数组.h @interface TitledArray : NSObject { NSMutableArray *realArray; BOOL uniqueTitles; BOOL uniqueIDs; } @property (nonatomic) BOOL uniqueTitles; @property (nonatomic) BOOL uniqueIDs; @property (nonatomic, retain) NSMutab

Leaks告诉我以下是内存泄漏,但我不确定原因

标题数组.h

@interface TitledArray : NSObject {

NSMutableArray *realArray;
BOOL uniqueTitles;
BOOL uniqueIDs;

}

@property (nonatomic) BOOL uniqueTitles;
@property (nonatomic) BOOL uniqueIDs;
@property (nonatomic, retain) NSMutableArray *realArray;
TitledArray.m

-(id)init {
return [self initWithUniqueTitles:FALSE uniqueIDs:FALSE];
}

-(id)initWithUniqueTitles:(BOOL)titles uniqueIDs:(BOOL)IDs {

if ( self = [super init] ) {
  //self.realArray = [[NSMutableArray alloc] init];
  self.realArray = [NSMutableArray array];
  self.uniqueTitles = titles;
  self.uniqueIDs = IDs;
}
return self;
}
任务加载

@interface MissionLoading : TitledObject {


TitledArray *storageWeights;
TitledArray *passengerWeights;

}


@property (nonatomic, retain) FloatArray *storageWeights;
@property (nonatomic, retain) FloatArray *passengerWeights;
任务加载

@synthesize storageWeights;
@synthesize passengerWeights;


-(id)init {
if ( self = [super init]) {


    self.storageWeights = [[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE];
    self.passengerWeights = [[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE];

}

return self;
}

-(void)dealloc{

[storageWeights release];
[passengerWeights release];

[super dealloc];
}
代码:

for(int i=0;i
根泄漏位于TitledArray对象中,self.realArray=[NSMutableArray]

我对iOS开发还是很陌生,但这对我来说很好。任何想法都会有帮助。如果需要,我可以提供更多信息


谢谢

看起来您有一个//self.realArray=[[NSMutableArray alloc]init];在init中。执行干净的构建,然后再次运行这些工具。由于某种原因,旧代码可能已经存在,并且肯定会被标记为泄漏


另一件事,将
self.realArray=nil
放在TitledArray的
dealloc
中。

当在
@property
声明中分配给具有
retain
的属性时,合成的setter已经保留了该值,因此自动删除您分配给该属性的内容,如下所示:

-(id)init {
    if ( self = [super init]) {
        self.storageWeights = [[[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE] autorelease];
        self.passengerWeights = [[[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE] autorelease];
    }
    // ....
}

我做了这两个建议,但它仍然在说它在泄漏:(这就是问题所在。我可能永远也不会明白这一点!谢谢你的帮助。
-(id)init {
    if ( self = [super init]) {
        self.storageWeights = [[[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE] autorelease];
        self.passengerWeights = [[[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE] autorelease];
    }
    // ....
}