数组中对象的内存泄漏

时间:2010-06-25 20:25:36

标签: objective-c memory-leaks

我已经开始在发布之前清理我的应用程序 - 使用“仪器”泄漏分析仪。

我发现了一个无法堵塞的漏洞。所以我构建了一个简单的项目来说明问题。请参阅下面的代码。我在视图上放了一个按钮来测试程序“test”。它总是会产生泄漏。

首先是名为“theObj”的对象的标题和代码

#import <Foundation/Foundation.h>


@interface theObj : NSObject {

NSString * theWord;     }     @property(nonatomic,retain)NSString * theWord;

@end

#import "theObj.h"


@implementation theObj
@synthesize theWord;

-(id) initWithObjects: (NSString *) aWord;
{
 if (self = [super init]){
  self.theWord = aWord;
 }
 return self;
}

-(void) dealloc{
[theWord release];
[super dealloc];
}

@end

现在是视图控制器

#import <UIKit/UIKit.h>
#import "theObj.h"

@interface LeakAnObjectViewController : UIViewController {
 NSMutableArray* arrObjects;
}
  - (IBAction)test;
@end

#import "LeakAnObjectViewController.h"

@implementation LeakAnObjectViewController

- (IBAction)test {  
 if (arrObjects == nil)
  arrObjects = [[NSMutableArray alloc] init];

 NSString* aStr = @"first";
 [arrObjects addObject:[[theObj alloc] initWithObjects:aStr]];
 [arrObjects removeAllObjects];
}  

2 个答案:

答案 0 :(得分:0)

您分配对象,这意味着您拥有它。然后你把它交给数组,这意味着数组也拥有它。然后数组将其删除,因此您是唯一的所有者。但是你没有对该对象的引用,所以你不能释放它,所以它只是泄露了。

答案 1 :(得分:0)

有人真的需要学习the rules around memory management。特别是因为它涉及所有权等。