int someFunction (CLLocation *currentLocation) {
double latitude = 12.3f;
double longitude = 22.5f;
CLLocationDistance d1 = [currentLocation distanceFromLocation:
[[CLLocation alloc] initWithLatitude:latitude longitude:longitude]];
return 0;
}
0
A
回答
1
是的。 Objective-C的內存管理,可以看起來很複雜,但記住一個基本的規則將帶你:
如果使用名稱以「黃金」或「新」的方法或創建你需要一個對象的所有權包含「複製」(例如,alloc,newObject或mutableCopy),或者如果您發送一個保留消息。您有責任放棄使用發行版或自動發行版所擁有的對象的所有權。任何其他時間你收到一個對象,你不能釋放它。
你叫alloc
沒有release
或autorelease
,所以你打破了規則。
3
是的。您正在分配第二個CLLocation
以傳遞給distanceFromLocation
而不是釋放它。
你可以做,而不是:
CLLocationDistance d1 = [currentLocation distanceFromLocation:
[[[CLLocation alloc] initWithLatitude:latitude longitude:longitude] autorelease]];
(或各種其他的事情見docs,如@whisty的意見建議。)
(此外,它似乎有點毫無意義,使呼叫並將其值分配給d1
,然後將其丟棄。)
+0
你也許應該閱讀關於內存管理的蘋果文檔 - http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/ 20000994-BAJHFBGH – 2010-06-28 22:54:19
2
是的。你分配一個CLLocation對象,但從不釋放它。我強烈建議您通讀。
相關問題
- 1. 這是內存泄漏嗎?
- 2. 這是內存泄漏嗎?
- 3. 這是內存泄漏嗎?
- 4. 這是內存泄漏嗎?
- 5. 這是內存泄漏嗎?
- 6. 這是Solr中的內存泄漏嗎?
- 7. 這是可能的內存泄漏嗎?
- 8. 修復Cocoa/ObjC中的內存泄漏
- 9. 這是內存泄漏嗎? (C++ BSTRs)
- 10. C++:這是內存泄漏嗎?
- 11. 這個NSString是內存泄漏嗎?
- 12. Android - 這是內存泄漏嗎?
- 13. 這是軌道內存泄漏嗎?
- 14. 是內存泄漏嗎?
- 15. 它是C中的內存泄漏嗎?
- 16. 這會造成內存泄漏嗎?
- 17. 這會造成內存泄漏嗎?
- 18. 這會造成內存泄漏嗎?
- 19. IronPython:這會泄漏內存嗎?
- 20. 這是在Android的內存泄漏
- 21. 這是導致內存泄漏的iPhone
- 22. 這是Java中內存泄漏的指示嗎?
- 23. 這是Linux Mono應用程序中的內存泄漏嗎?
- 24. 這是Sharepoint Workflow應用程序中的內存泄漏嗎?
- 25. 它是Image的內存泄漏嗎?
- 26. 這會泄漏內存
- 27. 是drawRect中----內存泄漏
- 28. 這是否會導致內存泄漏?
- 29. 爲什麼這是內存泄漏
- 30. 這不是一個內存泄漏
謝謝。 @「Fsfsdfsd」常量的處理方式不同嗎? – Jarsj 2010-06-28 23:24:13
您不必擔心字符串常量。你不會「分配」它們 - 它們總是在那裏,無論它們被保留或釋放了多少次。 (但是,對於使用任何'NSString'變量來做正確的事情仍然是一個好主意,以防將來有一天你把某些東西放在那裏不是一個常量。) – 2010-06-29 00:14:59