NSMutableArray泄漏问题

| 我以为我知道如何处理内存泄漏和数组,但是随后弹出。我不知道为什么会泄漏:
//  MyViewController.h

NSMutableArray      *myMutableArray;

@property (nonatomic, retain) NSMutableArray *myMutableArray;

//  MyViewController.m

@synthesize myMutableArray;

- (void) viewDidLoad {

    if (self.myMutableArray == nil) {
        self.myMutableArray = [[NSMutableArray alloc] init];
    }

    . . .

    for (NSUInteger i = 0; i < someCount; ++i) {

        [self.myMutableArray addObject:[NSString stringWithFormat: @\"%@\",myString]];

    }

}

- (void)viewDidUnload {
    self.myMutableArray = nil
}

- (void)dealloc {
     [myMutableArray release];
} 
    
已邀请:
您的问题在这里:
if (self.myMutableArray == nil) {
    self.myMutableArray = [[NSMutableArray alloc] init];
}
它应该是:
if (myMutableArray == nil) {
   self.myMutableArray = [[[NSMutableArray alloc] init] autorelease];
}
要么:
if (myMutableArray == nil) {
   myMutableArray = [[NSMutableArray alloc] init];
}
说明: 由于您将“ 4”用作属性更改器属性,因此该对象在传递给属性设置器时将被保留,因此当您“ 4”已拥有所有权的对象时就会泄漏。 解决方案是:a)将set6 Pass-d对象传递给属性设置器,或b)将ivar直接分配给分配的对象。     
您正在分配一个新数组,然后将其设置为keep属性。将该行更改为
self.myMutableArray = [NSMutableArray array]; 
    
self.myMutableArray = [[NSMutableArray alloc] init];
应该
self.myMutableArray = [[[NSMutableArray alloc] init] autorelease];
因为myMutableArray是保留的属性。     

要回复问题请先登录注册