2013-01-10 39 views
0

我幾乎和我的第一個應用程序完成的(很長的路要走,但有趣的時間)我想了一個星期,以減少我的應用程序的內存使用情況的內存減少我的應用程序

,但如果不工作,我想以確保它dealloc的使用後,但我看到,它沒有發生...

我沒有一個內存問題與searchviewController其更多的是使用100 MB RAM的DetailsViewController。

我會盡量表現出我的應用程序是如何在總結建立:

Searchview controller 

The main screen --> UIViewController with tableview 

in the didSelectRowAtIndex i have: 

    DetailsViewController *controller = [[DetailViewsController alloc]initWithNibName:@"DetailsViewController" bundle:nil]; 

    SearchResult *searchResult = [searchResults objectAtIndex:indexPath.row]; 
    controller.searchResult = searchResult; 


DetailsViewController 

的詳細畫面,被調用時選擇了某一行,它的一個UIView有一個子視圖(自定義滾動型)的定製滾動視圖有icarousel(自定義的UIView)

.h 

@property (nonatomic,weak) SearchResult *searchResult; 

.m 

@property (nonatomic, retain) iCarousel *carousel; 
@property (nonatomic, retain) UINavigationItem *navItem; 

實現:

MGBox *tablesGrid, *table1; 

viewDidLoad中:

//Add barButton 
UIBarButtonItem *reactButton = [[UIBarButtonItem alloc]..]; 
carousel = [[iCarousel alloc] init..]; 

//Add Tablesgrid 
tablesGrid = [MGBox boxWithSize:tablesGridSize]; 
tablesGrid.contentLayoutMode = MGLayoutGridStyle; 
[self.scrollview.boxes addObject:tablesGrid]; 

//Add Table 
table1 = MGBox.box; 
[tablesGrid.boxes addObject:table1]; 

在此之後我有所述信息搜索結果添加到標籤並填充icarousel(具有最多6項)的功能,icarousel是,我添加作爲子視圖滾動型等一個UIView ..

當我推回導航欄並返回到主視圖控制器時,它不會釋放該視圖,爲什麼? (nslogged dealloc但從未被調用)。內存警告後,它調用ViewDidUnload,並使一些內存空閒,但仍然沒有dealloc ....

我沒有參考其他對象的權利?除了searchResult,但我把它設置爲弱,所以它不應該是一個參考權利?

一些信息:

在MAINVIEW搜索後我有:

直播字節:5.75 MB生活:27.342 Transistory:68.200總體 字節:25.30 MB

選擇一行後,進入detailsViewController我有:

直播字節:5.4 MB 生活:32.498 Transistory:76.488 總字節:29.55 MB

拖動icarousel的子視圖行(看照片)後:

直播字節: 5.5 mb 居住:32.798 過境:122.850 總字節數:36。41 MB

自定義表視圖中選擇一些表

直播字節後:5.7 MB 生活:33.508 Transistory:161.80 總字節:40.12 MB

開盤後在應用中的鏈接並返回(在模式視圖中打開並將其解除)

直播字節:6.7 MB 生活:43.821 Transistory:371.761 總字節:144.95 MB

點擊圖片和拍出的照片在全屏和detailscreenview再次回來後(打開模態和解僱)

直播字節:6.76 MB 生活:43.798 Transistory:400.850 總字節:155.69 MB

如果我回去另一排它從來沒有得到少它只是增加了

不要是苦了我或者只是關閉的主題下沒有理由..

給我一些提示或建議,或者如果您不知道什麼是「問題」只是解釋我是什麼: 實時字節 - #生活 - #Transitory - 總體字節 - #總體

我想感謝這個網站的所有信息,因爲它有沒有它,我永遠不會到目前爲止

回答

2

在回答你的問題:

  1. 你說「當我推回去」的導航欄上。我希望你的意思是你「彈出」回來。您推動轉到輔助控制器/場景。你流行回去。見popViewControllerAnimated。同樣,每當你presentViewController,你應該有一個關聯的dismissViewControllerAnimated

  2. 如果使用故事板,請確保在故事板中沒有環形段(例如從A到B和從B到A的另一個段)。有關此主題的簡短討論,請參閱memory not releasing with ARC and storyboard in iOS 5.1

  3. 另一種可能性是「強參考週期」(又名「保留週期」)。請參閱Advanced Memory Management Programming Guide。任何可能對您的控制器保持強有力的參考可能會導致此問題。不太明顯的例子包括重複NSTimer對象等內容。


更新:

關於內存管理的一些法律總顧問

  • 如果您遇到內存問題,您應該始終貫穿了static analyzer你的代碼。如果您不使用ARC或者使用任何Core Foundation調用,這一點尤其重要,但在遇到任何內存問題時,這通常是第一步。

  • 請參閱Finding leaks with Instruments瞭解如何使用Instruments在您的應用程序中查找泄漏的指導。

  • 有時候,當你在內存分配中出現尖峯時,確定造成尖峯的原因很有用。有關具體建議如何從您的分配,到對這些分配來源的更有意義的分析,請參閱此Stack Overflow answer的第4點。簡而言之,突出顯示您在分配中不明原因的跳轉之一,設置底部窗口以顯示調用樹,隱藏系統庫,並查看您的哪些例程正在使用內存。

+0

我沒有使用故事板...重構一切都是故事板是一個好主意嗎? – MichaelAngelo

+0

@ user1876006不,沒有必要。但同樣的原則適用於NIB。如果你從A推到B,你只需要確保你永遠不會從B推到A,而是你從B推回到A.這是確保一個故事板沒有循環引用的邏輯等價物。我試圖澄清我的答案。 – Rob

+0

我在appDelegate中添加的導航欄「使」後退按鈕,我假設這是彈出視圖或不? – MichaelAngelo

相關問題