2015-11-22 38 views
0

我希望這只是一些簡單的事情,我無法弄清楚。iOS內存堆不斷增長

我有一個類擴展的核心數據模型。

+(CDvitalsPO2Data *) newVitalDataInContext:(NSManagedObjectContext *)context { 
    NSEntityDescription *entity = [NSEntityDescription entityForName:po2EntityName inManagedObjectContext:context]; 
    CDvitalsPO2Data *newVitalsDataPoint = [[[CDvitalsPO2Data class] alloc] initWithEntity:entity insertIntoManagedObjectContext:context];  
    return newVitalsDataPoint; 
} 

所以這返回一個新的項目在上下文和po2實體名稱。大。

如果我把這個代碼這個類擴展:

-(void) logPO2:(NSDictionary *)po2EntryDictionary forThisTime:(NSDate *)loggedTime inContext:(NSManagedObjectContext *)context { 

if (context) { 
     CDvitalsPO2Data *vitalsPO2Entry; 
     vitalsPO2Entry = [CDvitalsPO2Data newVitalDataInContext:context]; 
     vitalsPO2Entry.timeStamp = [NSDate dateWithTimeIntervalSinceReferenceDate:[loggedTime timeIntervalSince1970]]; 

     vitalsPO2Entry.accelX = [po2EntryDictionary objectForKey:po2LogAccelX]; 
     vitalsPO2Entry.accelY = [po2EntryDictionary objectForKey:po2LogAccelY]; 
     vitalsPO2Entry.accelZ = [po2EntryDictionary objectForKey:po2LogAccelZ]; 
     vitalsPO2Entry.patchID = [po2EntryDictionary objectForKey:po2LogPatchID]; 
     vitalsPO2Entry.patchRSSI = [po2EntryDictionary objectForKey:po2LogPatchRSSI]; 
     vitalsPO2Entry.sequenceID = [po2EntryDictionary objectForKey:po2LogSequenceID]; 
     vitalsPO2Entry.sessionID = [po2EntryDictionary objectForKey:po2LogSessionID]; 
     vitalsPO2Entry.po2Value = [po2EntryDictionary objectForKey:po2LogValue]; 

     NSError *error; 

     [[vitalsPO2Entry managedObjectContext] save:&error]; 
     if (error) { 
      NSLog(@"save error:%@",error); 
     } 
} 

我得到插入上下文對象,它就會被保存,但堆只是不停地生長。如果這個日誌每秒運行一次或每分鐘運行一次,我只會看到內存在增長。我已經把各種弱點指向了這些調用,嘗試將事情設置爲零,將一個自動釋放池放入地方;似乎沒有任何放緩,更不用說停止記憶蠕變。我覺得我缺少一些基本的東西。在上下文保存之後,這些對象是否不應該在它們超出範圍之後被拋棄?當我看着樂器時,似乎有一個保留在對象上,但它在系統級別,它不是來自我的一個例行調用。

回答

0

我見過的所有問題都直接對Xcode Scheme負責。 產品展示 - >方案 選擇運行選項取消選中 - >隊列調試(啓用原路返回錄音)

一旦這樣做,所有的內存佔用增長的立即消失。