2014-02-28 24 views
2

編輯CGMutablePath不即使CGPathReleased發佈被稱爲

Apparantly它似乎是在精靈套件中的錯誤/ Box2D的:SKPhysicsBody bodyWithPolygonFromPath memory leaks

我只是太天真的認爲,蘋果不會有泄漏:D

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, NULL, 3 * scale - offsetX, 44 * scale - offsetY); 
CGPathAddLineToPoint(path, NULL, 69 * scale - offsetX, 52 * scale - offsetY); 
CGPathAddLineToPoint(path, NULL, 80 * scale - offsetX, 14 * scale - offsetY); 
CGPathAddLineToPoint(path, NULL, 45 * scale - offsetX, 2 *scale - offsetY); 
CGPathAddLineToPoint(path, NULL, 1 * scale - offsetX, 16 *scale- offsetY); 

CGPathCloseSubpath(path); 

self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 
CGPathRelease(path); 

我錯過了什麼嗎?我釋放對象,但儀器有關內存泄漏的投訴..

75%

CGPathMoveToPoint(path, NULL, 3 * scale - offsetX, 44 * scale - offsetY); 

25%

self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 
+0

是什麼讓你認爲釋放路徑將路徑引用設置爲NULL? Apple文檔聲明:「減少圖形路徑的保留數」。 – zaph

+0

編輯該問題。你是對的,這沒有任何意義 – chrs

+0

你運行Xcode分析器嗎? – zaph

回答

0

蘋果文檔的狀態:「遞減的保留計數一個圖形路徑「。無論是否釋放路徑都基於當前的保留計數。如果其他東西保留了路徑,那麼它將不會被釋放。還有什麼可保留的路徑,如何:

self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 

如果你需要看到保留,發佈和自動釋放出現一個對象使用的儀器:

運行的儀器,在分配設置「記錄參考計數「開啓(您必須停止錄製以設置選項)。導致問題代碼運行,停止錄製,在那裏搜索感興趣的ivar,深入瞭解,您將能夠看到所有保留,發佈和autoreleases發生。

enter image description here

+0

http://stackoverflow.com/questions/20134891/skphysicsbody-bodywithpolygonfrompath-memory-leaks在sprite工具包中的一個bug。 – chrs

0

幾乎可以肯定你是泄漏SKPhysicsBodyself,但它也有可能是你在其他地方提取的路徑和過度保留它。儀器只跟蹤事物分配的時間。它無法檢測到你在釋放事物時犯了錯誤。因此,如果你泄漏整個physicsBody,它將顯示爲「在代碼的這個區域中分配的內存」。