[英]analyze and memory alerts in xcode
我在當前的iOS項目中的xcode中運行了“ analyze”,以嘗試查找凍結問題,並且有許多我不理解的內存警報(下面的截圖)。
那里發生了什么:我有一個擴展NSObject的自定義ObjC類; 在init方法中,我分配/初始化一個NSMutableArray,然后在循環中,用NSMutableArrays填充它。 此嵌套數組聲明為屬性,並在dealloc()中釋放。 它適用於應用程序的生命。
我做錯了嗎? 我不明白警告#3:@對象在此執行路徑中未被引用,並且保留計數為+1。
由於我的類分配外部數組,它擁有它並將清理它。 是否需要釋放內部數組?
感謝您的任何提示 - 仍然是新的。
編輯/添加嘗試消除我收到的其他內存警告,因此,如果有人偶然發現此問題,我想在此添加一個問題。
我通過下面的代碼得到以下警告(第二行“[keyArray addObject:etc”)。 發生了什么:我有一個自定義類(基於NSObject的鍵),我實例化並存儲在一個數組中。 根據對上一個問題的回答,我猜我的分配會增加保留計數,然后將其添加到數組中時,保留計數不會減少-因此會發生內存警告。
處理這樣的事情的正確方法是什么? 使用這樣的占位符:
Key * k = [[Key alloc] initKeyWithPath:path isBlackKey:NO]];
[keyArray addObject: k];
[k release];
這是正確的方法嗎? 或者我是否可以編寫自定義類來返回自動釋放的obj? (謝謝,抱歉這么久了!)。
第460行上分配的對象的潛在泄漏方法返回具有+1保留計數的Objective-C對象(擁有引用)第460行上分配的對象稍后在此執行路徑中未被引用,並且保留計數為+1(對象泄漏) )
-(void) addOctaveToArraysWithTransform:(CGAffineTransform*)trans andPath: (CGMutablePathRef) path
{
path = [self createCF_keyUsingTransform: trans];
[keyArray addObject:[[Key alloc] initKeyWithPath:path isBlackKey:NO]];
}
Key.h
#import <Foundation/Foundation.h>
#import "Key.h"
@interface Key : NSObject {
@public
CGMutablePathRef keyPath;
BOOL isBlackKey;
NSValue * path;
int keyState;
BOOL needsRedraw;
}
@property (nonatomic, assign) int keyState;
@property (nonatomic, assign) BOOL needsRedraw;
@property (nonatomic) CGMutablePathRef keyPath;
-(id) initKeyWithPath:(CGMutablePathRef) aPath isBlackKey:(BOOL)flag;
-(CGMutablePathRef) getKeyPath;
@end
Key.m
#import "Key.h"
@implementation Key
@synthesize keyState, needsRedraw, keyPath;
-(id) initKeyWithPath:(CGMutablePathRef) aPath isBlackKey:(BOOL)flag
{
if ((self = [super init])){
isBlackKey = flag;
keyState = 0;
needsRedraw = NO;
keyPath = aPath;
CGPathRetain(keyPath);
}
return self;
}
-(CGMutablePathRef) getKeyPath
{
return keyPath;
}
@end
是的,您必須釋放內部數組以平衡alloc / init。 請記住,外部數組將保留每個內部數組,並且大概在以后釋放外部數組。 但是在這里,您仍然要對剛剛執行的alloc / init負責。
希望有所幫助。
您在for循環的每次迭代中都有一個NSMutableArray分配。 而是使用: NSMutableArray array]
,這是一種方便的方法,該方法返回一個自動發布的NSMUtableArray,適用於添加到將保留NSMutableArray
fieldNotes
中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.