1

iPhone のメモリ リークをテストしようとしていますが、これを取り除くことができません。これがリークしているコードです。


- (id)initWithManagedObjectContext:(NSManagedObjectContext *)aMoc delegate:(id)aDelegate runSync:(BOOL)aRunSync {
    if (self = [super init]) {
        self.moc = aMoc;
        self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];
        self.delegate = aDelegate;
        calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        self.runSync = aRunSync;
    }

    return self;
}

ラインに漏れていself.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];ます。

self.settingManager インスタンス変数は、クラスの dealloc メソッドで解放されます。

他にどのような情報が適切かはわかりません。私に知らせてください、私はそれを提供することができます.

ご協力ありがとうございます。

-マーク

ここにヘッダーファイルがあります。


@interface VacaCalcCalculation : NSObject {
    NSManagedObjectContext *moc;
    VacaCalcSettingsManager *settingsManager;
    id delegate;
    NSCalendar *calendar;
    NSDate *nextBankLimitDate;
    BOOL runSync;
}

@property (nonatomic, retain) NSManagedObjectContext *moc;
@property (nonatomic, retain) VacaCalcSettingsManager *settingsManager;
@property (nonatomic, retain) id delegate;
@property (nonatomic, retain) NSCalendar *calendar;
@property (nonatomic, retain) NSDate *nextBankLimitDate;
@property (nonatomic) BOOL runSync;

- (id)initWithManagedObjectContext:(NSManagedObjectContext *)aMoc delegate:(id)aDelegate;
4

1 に答える 1

7

settingsManagerプロパティが に設定されている場合、retain次の行でオブジェクトを 2 回保持しています。self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];

自動解放されたオブジェクトを返すクラス メソッドを VacaCalcSettingsManager に追加autoreleaseするか作成してみてください。alloc]initそれ以外の場合は、プロパティを再宣言してassign、オブジェクトを 2 回保持しないようにすることができます。

于 2010-05-11T18:02:45.013 に答える