我已经开始在发布之前清理我的应用程序 - 使用“仪器”泄漏分析仪。
我发现了一个无法堵塞的漏洞。所以我构建了一个简单的项目来说明问题。请参阅下面的代码。我在视图上放了一个按钮来测试程序“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];
}
答案 0 :(得分:0)
您分配对象,这意味着您拥有它。然后你把它交给数组,这意味着数组也拥有它。然后数组将其删除,因此您是唯一的所有者。但是你没有对该对象的引用,所以你不能释放它,所以它只是泄露了。
答案 1 :(得分:0)
有人真的需要学习the rules around memory management。特别是因为它涉及所有权等。