簡體   English   中英

在xcode中分析和存儲警報

[英]analyze and memory alerts in xcode

我在當前的iOS項目中的xcode中運行了“ analyze”,以嘗試查找凍結問題,並且有許多我不理解的內存警報(下面的截圖)。

那里發生了什么:我有一個擴展NSObject的自定義ObjC類; 在init方法中,我分配/初始化一個NSMutableArray,然后在循環中,用NSMutableArrays填充它。 此嵌套數組聲明為屬性,並在dealloc()中釋放。 它適用於應用程序的生命。

我做錯了嗎? 我不明白警告#3:@對象在此執行路徑中未被引用,並且保留計數為+1。

由於我的類分配外部數組,它擁有它並將清理它。 是否需要釋放內部數組?

感謝您的任何提示 - 仍然是新的。

xcode內存警報的屏幕截圖

編輯/添加嘗試消除我收到的其他內存警告,因此,如果有人偶然發現此問題,我想在此添加一個問題。

我通過下面的代碼得到以下警告(第二行“[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM