我有Xcode的4.3内存泄漏的仪器一个非常奇怪的问题...基本上不会在下列情况下工作...泄漏检测问题4.3
- 项目,而不ARC创建支持。
- 创建一个简单的类它继承UIView的
- 使用“按钮”来创建这个类和“泄漏”的实例吧...泄漏不会被泄露仪器可以捕捉
所以这里有问题的类
@interface LeakTestView : UIView
- (id)initWithFrame:(CGRect)frame;
@end
@implementation LeakTestView
- (id)initWithFrame:(CGRect)frame
{
NSLog(@"initWithFrame called");
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
@end
现在我创建了泄漏的代码...
- (IBAction)leak:(id)sender {
LeakTestView* leak=[[LeakTestView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
NSLog(@"class is %@", [leak class]);
}
所以问题是,此泄漏不会被发现...
如果我改变基类NSObject的和,而不是initWithFrame覆盖的init(参见下文),则泄漏将被检测....
所以这里是如果我现在创建对象,让它将被检测
@interface LeakTestView : NSObject
- (id) init;
@end
@implementation LeakTestView
- (id) init {
NSLog(@"init called");
self = [super init];
if (self) {
}
return self;
}
@end
对泄漏的代码 - 检漏将触发和泄漏会“看到”进入仪器。
- (IBAction)leak:(id)sender {
LeakTestView* leak=[[LeakTestView alloc]init];
NSLog(@"class is %@", [leak class]);
}
任何想法是怎么回事?为什么不能检测UIView子类的泄漏,但将基类更改为NSObject将“修复”这个问题? 哦,是的,泄漏的对象可以看到使用“标记堆” - 一个标记之前的泄漏和一个标记后,我点击按钮,并创建泄漏 - 班级将被视为堆三角洲...
编辑:多了一个“有趣”的局面......如果我删除了“初始化”的东西(只ALLOC对象)
LeakTestView* leak=[LeakTestView alloc];
然后泄漏会不管是基类检测...什么地狱在这里?
EDIT2:多了一个 “有趣” 的事情。可以观察到的检漏问题只能在模拟器(的iOS 5.0,9A334是我的),但泄漏将被检测始终如果使用iPad设备...
有何评论?如果你没有问题,或者认为我磺化聚醚醚酮“谎言”只是告诉我,我错了,上面的情况是工作“就好了” - 我的泄漏通过描述您的Xcode仪器检测!
什么“乐器”?你使用什么泄漏检测器? – 2013-01-31 20:00:32