我有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