我在當前的iOS項目的xcode中運行「分析」以試圖追蹤凍結問題,並且有一些我不明白的內存警報(下面的屏幕截圖)。xcode中的分析和內存警報
這裏發生了什麼:我有一個自定義的ObjC類,擴展NSObject;在init方法中,我分配/ init一個NSMutableArray,然後在一個循環中,使用NSMutableArrays填充該嵌套數組。在這個執行路徑中沒有被引用的@對象,並且保留計數爲+1(在應用程序的生命中)。 。
由於我的類分配外部數組,它擁有它並將清理它。內部數組是否需要釋放?
感謝您的任何提示 - 這仍然是新的。
編輯/添加 試圖消滅額外的內存警告我收到,所以我想我要補充的問題在這裏有人絆倒在這個瓦特/同樣的問題的情況下。
我收到以下代碼(第二行「[keyArray addObject:etc」))的警報。發生了什麼:我有一個自定義的類(Key - 基於NSObject),我實例化並存儲在一個數組中。根據我對上一個問題的回答,我猜我的分配會增加保留計數,然後當它被添加到數組時,保留計數不會減少 - 所以會發生內存警告。
什麼是正確的方式來處理這樣的事情?使用像這樣的佔位符:
Key * k = [[Key alloc] initKeyWithPath:path isBlackKey:NO]];
[keyArray addObject: k];
[k release];
這是正確的方法嗎?或者我有辦法寫自定義類來返回一個autoreleased obj? (感謝和抱歉,這麼長時間囉!)。
在線路460 方法分配的物體的潛在的泄漏返回一個Objective-C的對象用線460分配的1保留計數(擁有參考) 對象未在此執行路徑以後引用和具有保留的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